| 比赛 |
2026.8.26 |
评测结果 |
EEEWWWEEWEEEEWEEEEEE |
| 题目名称 |
interval |
最终得分 |
0 |
| 用户昵称 |
yyswys |
运行时间 |
3.492 s |
| 代码语言 |
C++ |
内存使用 |
7.60 MiB |
| 提交时间 |
2026-08-26 11:01:12 |
显示代码纯文本
#include<bits/stdc++.h>
#define rep(i,b,n) for(int i=b;i<=n;++i)
#define lb(x) (x&(-x))
using namespace std;
const int N = 200005;
int n,m,a[N],b[N+3],pre[N+3],lst[N+3],bns[N+3],mn[N+3];
void upd(int x,int d){for(int i=x;i<=N;i+=lb(i)) mn[i] = min(mn[i],d);}
int qy(int l) {
int r=0,x;for(int i=19;~i;i--) {if((x=r+(1<<i))>N+1) continue;if(mn[x]>=l) r = x;}
return r;
}
struct Que{int l,r,id;}q[N+3],hs[N+3];
bool cmp(Que u,Que v){return u.r > v.r;}
int c[N];
int qmax(int l,int r){
int ans=0;
while(1){ans=ans>b[r]?ans:b[r];
if(r==l) break;
for(r-=1;r-1>=lb(r);r-=lb(r)){
ans=ans>c[r]?ans:c[r];
}
}
return ans;
}
int main()
{
freopen("intervallavretni.in","r",stdin);
freopen("intervallavretni.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
memset(mn,0x3f,sizeof(mn));
cin>>n>>m;
rep(i,1,n) {
cin>>a[i]>>b[i];
b[i]--;
c[i]=b[i];
for(int j=1;j<lb(i);j<<=1) c[i]=c[i]>c[i-j]?c[i]:c[i-j];
pre[i] = lst[b[i]]; lst[b[i]] = i;
}
rep(i,0,N) upd(i+1,lst[i]);
rep(i,1,m){ cin>>q[i].l>>q[i].r,q[i].id=i;q[i].l++;q[i].r++;hs[i].l=q[i].l,hs[i].r=q[i].r;}
sort(q+1,q+m+1,cmp);
int j=n;
for(int i=1;i<=m;++i) {
while(j>q[i].r) upd(b[j]+1,pre[j]),j--;
bns[q[i].id] = qy(q[i].l);
}
rep(i,1,m){
bns[i]++;
if(bns[i]>qmax(hs[i].l,hs[i].r)){
cout<<1<<" ";
}else{
cout<<0<<" ";
}
}
return 0;
}