1 条题解
-
0
我只用了 就猜出来这题用什么东西了,你也来猜猜看吧!
#include<bits/stdc++.h> using namespace std; const int N=5e5+10; int a[N],ans[N],cnt[N],B,mq,mr,sum; struct node{int l,r,id;}q[N]; bool cmp(node n1,node n2){return n1.l/B!=n2.l/B?n1.l<n2.l:n1.r<n2.r;} void add(int x) { if(cnt[x]==0)sum++; cnt[x]++; } void del(int x) { cnt[x]--; if(cnt[x]==0)sum--; } int main() { int n,m;cin>>n>>m;B=sqrt(n); for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++)cin>>q[i].l>>q[i].r,q[i].id=i; sort(q+1,q+m+1,cmp); for(int i=1,l=1,r=0;i<=m;i++) { while(l>q[i].l)add(a[--l]); while(r<q[i].r)add(a[++r]); while(l<q[i].l)del(a[l++]); while(r>q[i].r)del(a[r--]); ans[q[i].id]=sum; } for(int i=1;i<=m;i++)cout<<ans[i]<<'\n'; return 0; }
- 1
信息
- ID
- 11945
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者