萌新求助回滚莫队
查看原帖
萌新求助回滚莫队
376997
Harry27182SDream楼主2022/7/19 17:13

RT,样例过了,交上去 WA+TLE 0pts,求助

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int l,r,b,id;
}q[200005];
int n,m,ans,res[200005],vis[200005],L[505],R[505],a[200005];
bool cmp1(node a,node b)
{
	return a.l<b.l;
}
bool cmp2(node a,node b)
{
	if(a.b!=b.b)return a.b<b.b;
	return a.r>b.r;
}
void del(int x)
{
	vis[x]--;
	if(vis[x]==0)ans=min(ans,x);
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	int num=sqrt(n);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&q[i].l,&q[i].r);
		q[i].b=(q[i].l-1)/num+1;
		q[i].id=i;
	} 
	sort(q+1,q+m+1,cmp1);
	for(int i=1;i<=m;i++)
	{
		if(q[i].b!=q[i-1].b)
		{
			R[q[i-1].b]=i-1;
			L[q[i].b]=i;
		}
	}
	sort(q+1,q+m+1,cmp2);
	L[1]=1;R[q[m].b]=m;
	for(int i=1;i<=q[m].b;i++)
	{
		int l=0x3f3f3f3f,r=q[L[i]].r;
		for(int j=L[i];j<=R[i];j++)l=min(l,q[j].l);
		for(int j=l;j<=r;j++)vis[a[j]]++;
		for(int j=0;j<=200004;j++)if(!vis[j]){ans=j;break;}
		int num=l;
		for(int j=L[i];j<=R[i];j++)
		{
			while(r>q[j].r)del(a[r--]);
			int now=ans;
			while(l<q[j].l)del(a[l++]);
			res[q[j].id]=ans;
			for(int k=num;k<l;k++)vis[a[j]]++;
			l=L[i];ans=now;
		}
		for(int j=l;j<=r;j++)vis[a[j]]=0;
	}
	for(int i=1;i<=m;i++)printf("%d\n",res[i]);
	return 0;
}

附上第一组数据

97 98
9 1 3 1 1 4 7 2 8 8 7 7 1 3 6 3 8 2 7 2 1 5 4 2 3 9 7 6 5 3 7 4 7 1 7 8 5 4 1 3 2 8 2 3 1 8 8 1 0 5 5 3 0 9 5 3 1 2 1 6 8 1 2 7 2 9 5 9 3 6 4 7 6 6 2 9 4 0 2 4 5 8 8 8 9 5 3 0 0 5 8 0 6 2 7 0 1 
50 54
18 94
23 78
74 87
46 52
20 59
29 83
46 70
10 95
2 49
58 91
3 43
19 73
17 72
24 39
65 88
11 92
22 39
16 18
11 63
67 69
17 83
32 86
63 72
14 17
10 73
49 71
44 89
18 24
40 62
38 73
83 84
25 32
8 49
40 49
15 40
31 52
26 83
50 88
66 88
35 95
8 9
46 52
4 31
4 70
10 65
10 82
26 41
33 41
80 90
16 38
23 67
2 79
51 83
3 73
37 50
58 70
19 44
8 44
22 78
20 77
20 87
15 36
76 92
18 79
58 94
14 55
63 87
26 79
40 59
23 54
27 95
73 80
57 76
80 97
37 91
50 57
13 85
38 72
63 84
55 55
14 43
10 68
28 32
5 88
44 86
18 27
4 41
79 90
6 97
12 68
62 96
27 43
32 49
46 80
49 69
3 62
4 14
10
10
1
2
10
10
4
10
10
10
0
10
10
0
1
10
0
0
10
0
10
10
0
0
10
10
10
0
4
10
0
0
10
4
0
6
10
10
1
10
0
2
0
10
10
10
0
0
1
0
10
10
10
10
6
0
0
0
10
10
10
0
1
10
10
10
1
10
4
10
10
1
0
10
10
2
10
10
1
0
0
10
0
10
10
0
0
1
10
10
10
0
6
10
4
10
0
2022/7/19 17:13
加载中...