比赛 2026.8.26 评测结果 WWATTTAAAWWWWWWWWWWW
题目名称 interval 最终得分 20
用户昵称 rzzakioi 运行时间 7.804 s
代码语言 C++ 内存使用 6.62 MiB
提交时间 2026-08-26 12:47:03
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,q,a[250005],b[250005],c[250005]/*,id[250005]*/;
//bool ans[250005];
map<int,int>mp;
int t[2005],sa[250005],sb[250005];
//struct node{
//    int l,r;
//}qj[250005];
//bool operator <(const node &x,const node &y){
//    if(id[x.l]==id[y.l])return x.r<y.r;
//    return id[x.l]<id[y.l];
//}
int main(){
    freopen("intervallavretni.in","r",stdin);
    freopen("intervallavretni.out","w",stdout);
    bool flag=1;
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i],&b[i]);
        if(a[i]!=1)flag=0;
    }
    if(flag){
        for(int i=1;i<=n;i++){
            c[i]=b[i];
        }
        sort(c+1,c+n+1);
        int cnt=unique(c+1,c+n+1)-c-1;
        for(int i=1;i<=cnt;i++)mp[c[i]]=i;
        mp[c[0]]=0;
        for(int i=1;i<=n;i++)b[i]=mp[b[i]];
        while(q--){
            memset(t,0,sizeof(t));
            int l,r;
            scanf("%d%d",&l,&r);
            l++;r++;
            for(int i=l;i<=r;i++){
                t[b[i]]++;
            }
            bool flag=1;
            if(c[1]>1){
                printf("0 ");
                continue;
            }
            for(int i=2;i<=cnt;i++){
                if(t[i]&&!t[i-1]){
                    flag=0;
                    break;
                }
                else if(t[i]&&t[i-1]&&c[i]-c[i-1]>1){
                    flag=0;
                    break;
                }
            }
            if(!flag){
                printf("0 ");
                continue;
            }
            else{
                printf("1 ");
            }
        } 
    }
    else{
        for(int i=1;i<=n;i++){
            sa[i]=sa[i-1];
            sb[i]=sb[i-1];
            if(a[i]==2)sa[i]++;
            if(b[i]==2)sb[i]++;
        }
        while(q--){
            int l,r;
            scanf("%d%d",&l,&r);
            l++,r++;
            if(sb[r]-sb[l-1]<r-l+1){
                printf("1 ");
            }
            else if(sb[r]-sb[l-1]==r-l+1&&sa[r]-sa[l-1]==r-l+1){
                printf("1 ");
            }
            else printf("0 ");
        }
    }
    return 0;
}