Why 还在 Judging
  • 板块灌水区
  • 楼主SilverLi
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/15 23:21
  • 上次更新2023/10/23 18:20:45
查看原帖
Why 还在 Judging
688783
SilverLi楼主2023/4/15 23:21

Record

Judging 11 个小时了。。。

code

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,Q,a[N];//sq=sqrt n
int ans[N],vis[N],cnt,sq;
struct ne {
	int l,r,i;
	bool operator < (const ne &x) const {
		if(l/sq!=x.l/sq)	return l<x.l;
		if(l/sq &1)	return r<x.r;
		return r>x.r;
	}
}q[N];
inline void add(int p) {if(++vis[a[p]]==1)	++cnt;}
inline void del(int p) {if(--vis[a[p]]==0)	--cnt;}
signed main() {
	//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n;	sq=sqrt(n);
	for(int i=1;i<=n;++i)	cin>>a[i];
	cin>>Q;
	for(int i=1;i<=Q;++i) {cin>>q[i].l>>q[i].r;q[i].i=i;}
	sort(q+1,q+Q+1);
	int l=1,r=0;
	for(int i=1;i<=Q;++i) {
		while(l>q[i].l)	add(--l);
		while(r<q[i].r)	add(++r);
		while(l<q[i].l)	del(l++);
		while(r>q[i].r)	del(r--);
		ans[q[i].i]=cnt;
	}
	for(int i=1;i<=Q;++i)	cout<<ans[i]<<endl;
	return 0;
}
2023/4/15 23:21
加载中...