比赛 |
2025.3.6 |
评测结果 |
WWWWWWWWWW |
题目名称 |
采花 |
最终得分 |
0 |
用户昵称 |
彭欣越 |
运行时间 |
2.718 s |
代码语言 |
C++ |
内存使用 |
7.93 MiB |
提交时间 |
2025-03-06 21:34:43 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1000010;
int n,c,m,t[N],r[N],c1[N];
int s1[N],s2[N];
struct node {
int l,r,id;
}a[N];
bool cmp (node x,node y) {
return x.r<y.r;
}
int lowbit (int x) {
return x&-x;
}
void add (int x,int v) {
while (x<=n) {
c1[x]+=v;
x+=lowbit(x);
}
}
int query (int x) {
int cnt=0;
while (x>0) {
cnt+=c1[x];
x-=lowbit(x);
}
return cnt;
}
int main(){
freopen("1flower.in","r",stdin);
freopen("1flower.out","w",stdout);
cin >> n >> c >> m;
for (int i=1;i<=n;i++) {
cin >> t[N];
}
for (int i=1;i<=m;i++) {
cin >> a[i].l >> a[i].r;
a[i].id=i;
}
sort(a+1,a+n+1,cmp);
int j=1;
for (int i=1;i<=m;i++) {
for (;j<=a[i].r;j++) {
if (!s1[t[j]]) s1[t[j]]=j;
else {
if (!s2[t[j]]) {
add(s1[t[j]],1);
s2[t[j]]=j;
}else{
add(s1[t[j]],-1);
add(s2[t[j]],1);
s1[t[j]]=s2[t[j]];
s2[t[j]]=j;
}
}
}
r[a[i].id]=query(a[i].r)-query(a[i].l-1);
}
for (int i=1;i<=m;i++) cout << r[i] <<endl;
return 0;
}