洛谷P1972WA0求助!!!

传送门

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1000005;
int n;
int a[N];
int m;
struct box{
	int l,r;
	int plc;
	int ans;
}k[N];
bool cmp(box x,box y){
	if(x.l!=y.l){
		return x.l<y.l;
	}
	return x.r<y.r;
}
int b[N];
int cnt;
bool cmp2(box x,box y){
	return x.plc<y.plc;
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>k[i].l>>k[i].r;
		k[i].plc=i;
	}
	sort(k+1,k+1+m,cmp);
	for(int i=k[1].l;i<=k[1].r;i++){
		b[a[i]]++;
		if(b[a[i]]==1){
			cnt++;
		}
	}
	k[1].ans=cnt;
	for(int i=2;i<=m;i++){
		for(int j=k[i-1].l;j<k[i].l;j++){
			b[a[j]]--;
			if(b[a[j]]==0){
				cnt--;
			}
		}
		if(k[i].r>=k[i-1].r){
			for(int j=k[i-1].r+1;j<=k[i].r;j++){
				b[a[j]]++;
				if(b[a[j]]==1){
					cnt++;
				}
			}
		}
		else{
			for(int j=k[i].r;j>k[i-1].r;j--){
				b[a[j]]--;
				if(b[a[j]]==0){
					cnt--;
				}
			}
		}
		k[i].ans=cnt;
	}
	sort(k+1,k+1+m,cmp2);
	for(int i=1;i<=m;i++){
		cout<<k[i].ans<<endl;
	}
	return 0;
}
/*

*/

抱歉我用树状数组

我用的也是树状数组

我用的莫队
莫队不行吗?QWQ

当然可以

我用的莫队但是跟你的差别也比较大

是我的写法有问题么QWQ
还是马蜂》