求助
查看原帖
求助
359614
Forever1507楼主2021/5/18 20:43

按第一篇题解思路写的,样例已过,提交全WA,DE不出BUG了有没有神犇帮个忙啊

#include<bits/stdc++.h>
using namespace std;
namespace FAST{
	int read(){
		int x=0,f=1;
		char c=getchar();
		while(c<'0'||c>'9'){
			if(c=='-')f=-1;
			c=getchar();
		}
		while(c>='0'&&c<='9'){
			x=x*10+c-'0';c=getchar();
		}
		return x*f;
	}
}
using namespace FAST;
int n,a[1000005],tree[1000005],len,pos[1000005],m,l[1000005],r[1000005],ans[1000005];
struct node{
	int l,r,pos;
}nd[1000005];
bool cmp(node a,node b){
	return a.r<b.r;
}
int lowbit(int x){
	return x&-x;
}
int query(int x){
	int sum=0;
	for(int i=x;i>0;i-=lowbit(i)){
		sum+=tree[i];
	}
	return sum;
}
void update(int x,int val){
	for(int i=x;i<=n;i+=lowbit(i)){
		tree[i]+=val;
	}
	return;
}
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		update(i,1);
		if(pos[a[i]])update(pos[a[i]],-1);
		pos[a[i]]=i;
	}
	m=read();
	for(int i=1;i<=m;i++){
		nd[i].l=read();
		nd[i].r=read();
		nd[i].pos=i;
	}
	sort(nd+1,nd+1+m,cmp);
	for(int i=1;i<=m;i++){
		ans[nd[i].pos]=query(nd[i].r)-query(nd[i].l-1);
	}
	for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
	return 0;
} 
2021/5/18 20:43
加载中...