1. 程式人生 > >bzoj5194: [Usaco2018 Feb]Snow Boots

bzoj5194: [Usaco2018 Feb]Snow Boots

%d scan nbsp true oot return name cst usaco

還真是。。

就是

的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\n"); else printf("0\n"); return 0; }

bzoj5194: [Usaco2018 Feb]Snow Boots