CodeForces 279C

来源:互联网 发布:新网域名管理 编辑:程序博客网 时间:2024/06/06 21:17

题解思路:

求区间是否是单调或先增后减中间可以有平的,那么前后扫一遍然后看左右边界延伸递增长度后是否相差<=1就可以了。


#include <cstdio> #include<iostream> #include <cstring> #include <cmath> #include <algorithm> #include<vector>using namespace std;typedef long long ll; const int mx = 1e5+10;int n,m;int a[mx];int f[mx],b[mx];int main(){f[0] = 1;while(~scanf("%d%d",&n,&m)){b[n+1] = 1;for(int i=1;i<=n;i++) scanf("%d",a+i);for(int i=1;i<=n;i++){if(f[i-1]==1) {f[i] = 1;for(int j=i+1;j<=n;j++)if(a[j]>=a[j-1]) f[i]++;else break;}else f[i] = f[i-1]-1;}for(int i=n;i>=1;i--){if(b[i+1]==1){b[i] = 1;for(int j=i-1;j>0;j--)if(a[j]>=a[j+1]) b[i]++;else break;}else b[i] = b[i+1] - 1;}int l,r,L,R;while(m--){scanf("%d%d",&l,&r);l = l+f[l]-1;r = r-b[r]+1;if(r-l<=1) puts("Yes");else puts("No");}}return 0; } 


原创粉丝点击