| 比赛 |
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;
}