bzoj5194: [Usaco2018 Feb]Snow Boots

还真是。。

就是

一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解

的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;
}

 

posted @ 2018-04-17 21:06  AKCqhzdy  阅读(356)  评论(0编辑  收藏  举报