怎么会这样?
查看原帖
怎么会这样?
494699
卷王慢即快楼主2022/10/15 16:36
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000001
int n,m,agp=0;
int a[maxn],l[maxn],r[maxn],num[maxn];
int last[maxn],ans[maxn];
int w[maxn];
inline void add(int x,int v)
{
	for(int i=x;i<=n;i+=i&(-i)) w[i]+=v;
}
inline int sum(int x)
{
	int cnt=0;
	for(int i=x;i;i-=i&(-i)) cnt+=w[i];
	return cnt;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>l[i]>>r[i];
		num[i]=i;
	}
	sort(l+1,l+m+1);
	sort(r+1,r+m+1);
	for(int i=1;i<=m;i++)
	{
		for(int j=agp;j<=r[i];j++)
		{
			if(last[a[j]]) add(last[a[j]],-1);
			add(j,1);
			last[a[j]]=j;
		}
		agp=r[i]+1;
		ans[num[i]]=sum(r[i])-sum(l[i]-1);
	}
	for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
	return 0;
}

记录?! 是什么问题

2022/10/15 16:36
加载中...