比赛 |
2025.3.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
采花 |
最终得分 |
100 |
用户昵称 |
健康铀 |
运行时间 |
12.823 s |
代码语言 |
C++ |
内存使用 |
26.31 MiB |
提交时间 |
2025-03-06 21:02:57 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct node{
long long x,y,z;
}e[3000010];
bool cmp(node A,node B){
return A.y<B.y;
}
long long n,a[3000010],l[3000010],b[3000010],c,m,ans[3000010],num[3000010];
void add(long long x,long long y){
if(x==0)
return;
for(;x<=n;x+=x&-x){
num[x]+=y;
}
}
long long ask(long long x){
long long res=0;
for(;x;x-=x&-x){
res+=num[x];
}
return res;
}
int main(){
freopen("1flower.in","r",stdin);
freopen("1flower.out","w",stdout);
cin>>n>>c>>m;
for(long long i=1;i<=n;i++){
cin>>a[i];
l[i]=b[a[i]],b[a[i]]=i;
}
for(long long i=1;i<=m;i++){
cin>>e[i].x>>e[i].y;
e[i].z=i;
}
sort(e+1,e+m+1,cmp);
for(long long i=1,j=1;i<=n;i++){
add(l[l[i]],-1),add(l[i],1);
while(e[j].y==i&&j<=m){
ans[e[j].z]=ask(e[j].y)-ask(e[j].x-1);
j++;
}
}
for(long long i=1;i<=m;i++){
cout<<ans[i]<<endl;
}
return 0;
}