?Good Bye 2019 B. Interesting Subarray

https://codeforces.com/contest/1270/problem/B

思路:由样例发现公差为1的等差数列不满足条件

           对于∀的l,r   max(a)-min(a)=|r-l|

           由此想到若任意相邻两项差的绝对值为1 则不满足条件

           反过来若存在相邻两项差的绝对值大于1 这两项组成的子串就满足条件

           只要改变任意相邻两项差的绝对值为1的序列中的某一项,使得不满足任意相邻两项差的绝对值为1 就必存在字串满足条件

官方:不失一般性 max>min?

?Good Bye 2019 B. Interesting Subarray_第1张图片

 

 

 总共max-(min+1)+1=max-min项 故至少有一项大于等于2

 

 

 

#include
#define ll long long
using namespace std;
const int N=2e5+5 ;
int a[N];
int main(){
    int T;
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>T;
    while(T--){
        int n,flag1=0,flag2=0,pos1=0,pos2=0,flag=0;
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
    /*    for(int i=2;i<=n;i++)
        if(a[i]!=a[i-1]+1){flag1=1;pos1=i;break;}
            for(int i=2;i<=n;i++)
        if(a[i]!=a[i-1]-1){flag2=1;pos2=i;break;
        }*/
        for(int i=2;i<=n;i++){
            if(abs(a[i]-a[i-1])>=2){cout<<"YES"<1<<' '<1;break;
            }
        }
    //    cout<
        if(!flag)cout<<"NO"<<endl;
    /*    else {
            cout<<"YES"<=j-i+1){
                    cout<=i-pos1+1){
                    cout<=i-pos2+1){
                    cout<i){
                    cout<<1<<' '<=1;i--){
                m1=min(m1,a[i]);m2=max(m2,a[i]);
                if(m2-m1>n-i+1){
                    cout<*/
    /*    }*/
          
    
    
        
    }
    return 0;
    
}

你可能感兴趣的:(?Good Bye 2019 B. Interesting Subarray)