求助WA*7
查看原帖
求助WA*7
809708
whssy楼主2023/7/16 23:17
#include<bits/stdc++.h>
using namespace std;
template<typename T>
inline void in(T &x){
	char c=getchar();bool f=0;
	while (c<'0'||c>'9') {
		if (c=='-') f=1;
		c=getchar();
	}
	for (x=0;c>='0'&&c<='9';c=getchar())
		x=(x<<3)+(x<<1)+(c&15);
	x=f?-x:x;
}
template<typename T>
inline void out(T x){
	if(x<0) putchar('-'),x=-x;
	if(x/10) out(x/10);
	putchar((x%10)|48);
}
const int N=1e6+5;
int n,m;
int a[N],c[N],ton[N],lst[N];
void updata(int i,int data){
	for(;i<=n;i+=i&-i)
		c[i]+=data;
}
int sum(int i){
	int ans=0;
	for(;i;i-=i&-i)
		ans+=c[i];
	return ans;
}
struct qstn{
	int l,r,id;
};
bool cmp1(const qstn &x,const qstn &y){
	if(x.r==y.r) return x.l<y.l;
	return x.r<y.r;
}
int ans[N];
qstn q[N];
int main(){
	in(n);
	for(register unsigned int i=1;i<=n;i++){
		in(a[i]);
		if(!ton[a[i]]){
			lst[i]=N-5;
			ton[a[i]]=i;
		}else{
			lst[i]=ton[a[i]];
			ton[a[i]]=i;
		}
	}
	in(m);
	for(register unsigned int i=1;i<=m;i++){
		in(q[i].l);
		in(q[i].r);
		q[i].id=i;
	}
	int j=1;
	sort(q+1,q+m+1,cmp1);
	for(register unsigned int i=1;i<=m;i++){
		for(;j<=q[i].r;++j){
			if(lst[j])
				updata(lst[j],-1);
			updata(j,1);
		}
		ans[q[i].id]=sum(q[i].r)-sum(q[i].l-1);
	}
	for(register unsigned int i=1;i<=m;i++){
		printf("%d\n",ans[i]);
	}
	return 0;
}
2023/7/16 23:17
加载中...