zoukankan      html  css  js  c++  java
  • ?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;
        
    }
  • 相关阅读:
    day 21 01 序列化模块和模块的导入的复习以及包的初识
    day 20 02 模块的导入
    Shell从入门到精通进阶之三:表达式与运算符
    Shell从入门到精通进阶之二:Shell字符串处理之${}
    shell从入门到精通进阶之一:Shell基础知识
    容器平台自动化CI/CD流水线实践之一:环境概述
    什么是DevOps?
    kubernetes进阶之七:Service
    kubernetes进阶之六:StatefulSet & DaemonSet
    kubernetes进阶之五:Replication Controller&Replica Sets&Deployments
  • 原文地址:https://www.cnblogs.com/wyh447154317/p/12164383.html
Copyright © 2011-2022 走看看