TLE 5到10
查看原帖
TLE 5到10
56646
jun君楼主2021/8/15 20:53

后面五个点超时了…

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,a[100010],q,l,r,unok,ans[100010];
int jsq[100010];
struct st{
	int l,r,bl,id;
}Q[100010];
bool cmp(st a,st b){
    return a.bl!=b.bl?a.l<b.l:((a.bl&1)?a.r<b.r:a.r>b.r);

}
int main()
{
	scanf("%d%d",&n,&q);
	for (int i=1;i<=n;i++)scanf("%d",&a[i]);
	m=sqrt(n);
	for (int i=1;i<=q;i++){
		scanf("%d%d",&Q[i].l,&Q[i].r);
		Q[i].bl=(l-1)/m+1;Q[i].id=i;
	}
	sort(Q+1,Q+1+q,cmp);
	l=0;r=0;
	for (int i=1;i<=q;i++){
		while (l<Q[i].l){
			if (jsq[a[l]]==2)unok--;
			jsq[a[l]]--;l++;
		}
		while (l>Q[i].l){
			l--;
			if (jsq[a[l]]==1)unok++;
			jsq[a[l]]++;
		}
		while (r<Q[i].r){
			r++;
			if (jsq[a[r]]==1)unok++;
			jsq[a[r]]++;
		}
		while (r>Q[i].r){
			if (jsq[a[r]]==2)unok--;
			jsq[a[r]]--;r--;
		}
		
//		printf("%d %d: %d\n",Q[i].l,Q[i].r,unok);
		ans[Q[i].id]=unok;
	}
	for (int i=1;i<=q;i++){
		if (ans[i])printf("No\n");
		else printf("Yes\n");
	}
	return 0;
}
2021/8/15 20:53
加载中...