比赛 2026.8.26 评测结果 AATTTTTTTTTTTTTTTTTT
题目名称 interval 最终得分 10
用户昵称 ChenBp 运行时间 38.910 s
代码语言 C++ 内存使用 63.87 MiB
提交时间 2026-08-26 12:40:23
显示代码纯文本
#include <iostream> 
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=2.5e5+5,V=1e9;
int a[N],b[N];
struct node{
    int a,b;
    node(){
        a=b=0;
    }
    node(int _a,int _b){
        a=_a,b=_b;
    }
}c[N];
const int tN=20*N;
int tr[tN],lc[tN],rc[tN],cnt=0,rt=0;
#define mid ((l+r)/2)
void update(int& u,int l,int r,int x,int v){
    if(u==0) u=++cnt;
    if(l==r){
        tr[u]+=v;
        return;
    }
    if(x<=mid) update(lc[u],l,mid,x,v);
    else update(rc[u],mid+1,r,x,v);
    tr[u]=min(tr[lc[u]],tr[rc[u]]);
}
int query(int u,int l,int r,int xl,int xr){
    if(xl<=l&&r<=xr) return tr[u];
    if(u==0) return 0;
    int ans=0x3f3f3f3f;
    if(xl<=mid) ans=min(ans,query(lc[u],l,mid,xl,xr));
    if(mid+1<=xr) ans=min(ans,query(rc[u],mid+1,r,xl,xr));
    return ans;
}
int solve(int l,int r){
    cnt=rt=0;
    memset(tr,0,sizeof(tr));
    memset(lc,0,sizeof(lc));
    memset(rc,0,sizeof(rc));
    
    int len=r-l+1;
    for(int i=l;i<=r;i++){
        c[i-l+1]=node(a[i],b[i]);
        update(rt,1,V,a[i],1);
    }
    sort(c+1,c+1+len,[](node x,node y){
        if(x.b==y.b) return x.a<y.a;
        return x.b<y.b;
    });
    for(int i=1;i<=len;i++){
        if(c[i].a==c[i].b) continue;
//        cout<<c[i].a<<" "<<c[i].b<<" "<<query(rt,1,V,c[i].a+1,c[i].b)<<" "<<query(rt,1,V,c[i].a,c[i].a)<<" \n";
        if(query(rt,1,V,c[i].a+1,c[i].b-1)<1||query(rt,1,V,c[i].a,c[i].a)<2) return 0;
        update(rt,1,V,c[i].a,-1);
        update(rt,1,V,c[i].b,1);
    }
    return 1;
}
int main(){
    freopen("intervallavretni.in","r",stdin);
    freopen("intervallavretni.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n,q;
    cin>>n>>q;
    for(int i=0;i<n;i++){
        cin>>a[i]>>b[i];
    }
    while(q--){
        int l,r;
        cin>>l>>r;
        cout<<solve(l,r)<<" ";
    }
    return 0;
}