比赛 2025.3.6 评测结果 AAAAAAAAAA
题目名称 采花 最终得分 100
用户昵称 wdsjl 运行时间 2.421 s
代码语言 C++ 内存使用 14.01 MiB
提交时间 2025-03-06 20:53:34
显示代码纯文本
#include <bits/stdc++.h> 
using namespace std;

struct node{
	int l,r,ps;
}t[2000010];

int l1[2000010],l2[2000010],c[2000010],a[2000010],ans[2000010];
int n,q,m;

bool cmp(node A,node B){
   return A.r<B.r;
}

void add(int x,int val){
    for(int i=x;i<=n;i+=(i&-i))c[i]+=val;
}

int query(int x){
    int ans=0;
    for(int i=x;i;i-=(i&-i))ans+=c[i];
    return ans;
}

int main(){
	freopen("1flower.in","r",stdin);
	freopen("1flower.out","w",stdout); 
    scanf("%d%d%d",&n,&q,&m);
    for(int i=1;i<=n;++i)scanf("%d",&a[i]);
    for(int i=1;i<=m;++i){
       scanf("%d%d",&t[i].l,&t[i].r);
       t[i].ps=i;
    }
    sort(t+1,t+m+1,cmp);
    int j=1;
    for(int i=1;i<=m;++i){
    	for(;j<=t[i].r;++j){
           if(!l1[a[j]])l1[a[j]]=j;
           else {
           	  if(!l2[a[j]]){
           	  	add(l1[a[j]],1);
                l2[a[j]]=j;
           	  }else {
           	  	 add(l2[a[j]],1);
           	  	 add(l1[a[j]],-1);
           	  	 l1[a[j]]=l2[a[j]];
           	  	 l2[a[j]]=j;
           	  } 
           }
    	}
    	ans[t[i].ps]=query(t[i].r)-query(t[i].l-1);
    }
    for(int i=1;i<=m;++i)printf("%d\n",ans[i]);
    return 0;
}