P1972求助
  • 板块学术版
  • 楼主Jerry_heng
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/15 23:05
  • 上次更新2023/10/23 18:20:53
查看原帖
P1972求助
763878
Jerry_heng楼主2023/4/15 23:05
#include<bits/stdc++.h>
using namespace std;
int n,m,a[4000101],nxt=1,mp[4000101],tree[4000101];
struct node{
	int l,r,num,ans;
}q[4000101];
inline int read(){
	int x=0;
	char ch=getchar();
	while(ch<'0'&&ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch-'0');
		ch=getchar();
	}
	return x;
}
bool cmp1(node p,node q){return p.r<q.r;}
bool cmp2(node p,node q){return p.num<q.num;}
int lowbit(int x){return x&-x;}
void add(int x,int t){
	for(;x<=n;x+=lowbit(x))tree[x]+=t;
}
int query(int x){
	int sum=0;
	for(;x;x-=lowbit(x))sum+=tree[x];
	return sum;
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++)a[i]=read();
	m=read();
	for(int i=1;i<=m;i++){
		q[i].l=read();
		q[i].r=read();
		q[i].num=i;
	}
	sort(q+1,q+m+1,cmp1);
	for(int hyh=1;hyh<=m;hyh++){
		for(int i=nxt;i<=q[hyh].r;i++){
			if(mp[a[i]])add(mp[a[i]],-1);
			add(i,1);
			mp[a[i]]=i;
		}
		q[hyh].ans=query(q[hyh].r)-query(q[hyh].l-1);
		nxt=q[hyh].r+1;
	}
	sort(q+1,q+m+1,cmp2);
	for(int i=1;i<=m;i++)printf("%lld\n",q[i].ans);
	return 0;
}

RE是什么鬼

2023/4/15 23:05
加载中...