还真是。。
就是
一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解
的t3嘛。。。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; struct node { int a,id; }p[110000]; bool cmp1(node n1,node n2){return n1.a>n2.a;} struct query { int s,d,id; }q[110000]; bool cmp2(query q1,query q2){return q1.s>q2.s;} int pre[110000],nxt[110000]; bool as[110000]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&p[i].a), p[i].id=i; for(int i=1;i<=m;i++) scanf("%d%d",&q[i].s,&q[i].d), q[i].id=i; sort(p+1,p+n+1,cmp1); sort(q+1,q+m+1,cmp2); for(int i=1;i<=n;i++)pre[i]=i-1,nxt[i]=i+1; int tp=1,mmax=1; for(int i=1;i<=m;i++) { for(int j=tp;j<=n;j++) { if(p[j].a<=q[i].s){tp=j;break;} nxt[pre[p[j].id]]=nxt[p[j].id]; pre[nxt[p[j].id]]=pre[p[j].id]; mmax=max(mmax,nxt[p[j].id]-pre[p[j].id]); } if(mmax<=q[i].d)as[q[i].id]=true; else as[q[i].id]=false; } for(int i=1;i<=m;i++) if(as[i]==true)printf("1 "); else printf("0 "); return 0; }