?Good Bye 2019 B. Interesting Subarray

Posted wyh447154317

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了?Good Bye 2019 B. Interesting Subarray相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

技术图片

 

 

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

 

 

 

#include<bits/stdc++.h>
#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"<<endl;cout<<i-1<< <<i<<endl;flag=1;break;
            }
        }
    //    cout<<pos1<<‘ ‘<<pos2<<endl;
        if(!flag)cout<<"NO"<<endl;
    /*    else {
            cout<<"YES"<<endl;
            for(int i=1;i<n;i++){
                if(flag) break;
                int m1=a[i],m2=a[i];
            for(int j=i+1;i<=n;i++){
                m1=min(m1,a[j]);m2=max(m2,a[j]);
                if(m2-m1>=j-i+1){
                    cout<<i<<‘ ‘<<j<<endl;flag=1;break;
                }
            }
        }
        /*    int m1=a[pos1],m2=a[pos1];
            for(int i=pos1+1;i<=n;i++){
                m1=min(m1,a[i]);m2=max(m2,a[i]);
                if(m2-m1>=i-pos1+1){
                    cout<<pos1<<‘ ‘<<i<<endl;flag=1;break;
                }
            }
            if(!flag){
            
             m1=a[pos2],m2=a[pos2];
            for(int i=pos2+1;i<=n;i++){
                m1=min(m1,a[i]);m2=max(m2,a[i]);
                if(m2-m1>=i-pos2+1){
                    cout<<pos2<<‘ ‘<<i<<endl;flag=1;break;
                }
            }
        }
            if(!flag){
            
             m1=a[1],m2=a[1];
            for(int i=2;i<=n;i++){
                m1=min(m1,a[i]);m2=max(m2,a[i]);
                if(m2-m1>i){
                    cout<<1<<‘ ‘<<i<<endl;flag=1;break;
                }
            }
            }
            if(!flag){
            
             m1=a[n],m2=a[n];
            for(int i=n-1;i>=1;i--){
                m1=min(m1,a[i]);m2=max(m2,a[i]);
                if(m2-m1>n-i+1){
                    cout<<i<<‘ ‘<<n<<endl;flag=1;break;
                }
            }
            }*/
    /*    }*/
          
    
    
        
    }
    return 0;
    
}

以上是关于?Good Bye 2019 B. Interesting Subarray的主要内容,如果未能解决你的问题,请参考以下文章

Good Bye 2015 B. New Year and Old Property

Good Bye 2019 C. Make Good

Good Bye 2019

Good Bye 2019 C. Make Good (异或的使用)

Good Bye 2019

Good Bye 2019