《RE》
查看原帖
《RE》
184271
l55584楼主2022/4/5 23:11

本地数据都过了,一交全RE……

本来复键想练练手,没想到一上来就把心态练崩了

#include <bits/stdc++.h>
using namespace std;
#define rep(a,b,c) for(int a=b;a<=c;a++)
const int N=2e6+5;int n;
int read()
{
	char c;int f=1,ret=0;c=getchar();
	while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9'){ret=ret*10+c-'0';c=getchar();}
	return ret*f;
}
struct note
{
	int l,r;int loc;
};
note q[N];
int las[N];
int lowbit(int x){return x&(-x);}
int t[N<<1];
int query(int loc)
{
	int ret=0;
	while(loc){ret+=t[loc];loc-=lowbit(loc);}
	return ret;
}
int add(int loc,int rul)
{
	while(loc<=n){t[loc]+=rul;loc+=lowbit(loc);}
}
int ans[N];
bool cmp(note a,note b){return a.r<b.r;}int a[N];
int main()
{
//	freopen("P1972_1.in","r",stdin);
//	freopen("out.out","w",stdout);
	cin>>n;
	int m;rep(i,1,n) a[i]=read();
	cin>>m;
	rep(i,1,m){q[i].l=read();q[i].r=read();q[i].loc=i;}
	sort(q+1,q+1+m,cmp);
	int top=1;
	rep(i,1,n)
	{
		//cout<<i<<endl;
		add(las[a[i]]+1,1);add(i+1,-1);las[a[i]]=i;//rep(j,1,i)
		//cout<<query(j)<<" ";cout<<endl;
		while(q[top].r==i)
		{
			ans[q[top].loc]=query(q[top].l);top++;
		}
	}
	rep(i,1,m) cout<<ans[i]<<"\n";
	return 0;
}
2022/4/5 23:11
加载中...