• ?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;
        
    }
  • 相关阅读:
    Oracle中的to_date参数含义
    Oracle 中 IW和WW 有何差别
    iBaits.Net(1):简介与安装
    带你逛逛诺基亚芬兰总部:满满都是回忆啊
    LINQ的分组聚合技术
    WPF的Docking框架 ——AvalonDock
    iBatis.Net(3):创建SqlMapper实例
    iBatis.Net(2):基本概念与配置
    C#异步编程及其同步机制
    web使用
  • 原文地址:https://www.cnblogs.com/wyh447154317/p/12164383.html
Copyright © 2020-2023  润新知