QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#241044#964. Excluded MinThankto_zy6RE 9ms14080kbC++143.5kb2023-11-05 22:25:152023-11-05 22:25:16

Judging History

你现在查看的是最新测评结果

  • [2023-11-05 22:25:16]
  • 评测
  • 测评结果:RE
  • 用时:9ms
  • 内存:14080kb
  • [2023-11-05 22:25:15]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int l[200005],r[200005];
int ans[200005];
const int INF=1<<28;
const int N=200000;
struct point{
	int x[2];
	int id;
	bool operator == (point y)const{
		return y.x[0]==x[0]&&y.x[1]==x[1];
	}
}p[200005],g[200005];
bool cmp1(point x,point y)
{
	return x.x[0]<y.x[0]||(x.x[0]==y.x[0]&&x.x[1]<y.x[1]);
}
bool cmp2(point x,point y)
{
	return x.x[1]<y.x[1]||(x.x[1]==y.x[1]&&x.x[0]<y.x[0]);
}
int _x;
namespace edge{
	int he[200005],to[200005],ne[200005],cnt;
	void link(int x,int y)
	{
		cnt++;
		to[cnt]=y;
		ne[cnt]=he[x];
		he[x]=cnt;
	}
}
namespace star{
	int he[200005],to[200005],ne[200005],cnt;
	void link(int x,int y)
	{
		cnt++;
		to[cnt]=y;
		ne[cnt]=he[x];
		he[x]=cnt;
	}
}
namespace KDT{
	struct node{
		int fl;
		int lx,rx,ly,ry,dep;
		int mx,tag;
		int ls,rs;
		void make(int _l,int _r,int _s,int _t,int _d){lx=_l;rx=_r;ly=_s;ry=_t;dep=_d;}
	}tr[4000005];
	void add_tag(int k,int val)
	{
		tr[k].mx+=val;
		tr[k].tag+=val;
	}
	void pushdown(int k)
	{
		if(tr[k].ls)add_tag(tr[k].ls,tr[k].tag);
		if(tr[k].rs)add_tag(tr[k].rs,tr[k].tag);
		tr[k].tag=0;
	}
	void pushup(int k)
	{
		tr[k].mx=max(tr[tr[k].ls].mx,tr[tr[k].rs].mx);
	}
	int tot;
	int build(int l,int r,int d)
	{
		int mid=(l+r)>>1,no=++tot;
		tr[no].dep=d;
		tr[no].fl=-1;
		if(l==r)
		{
			tr[no].make(p[l].x[0],p[l].x[0],p[l].x[1],p[l].x[1],d);
			tr[no].fl=p[l].id;
			return no;
		}
		if(d&1)
		{
			nth_element(p+l,p+mid,p+r+1,cmp1);
			tr[no].ls=build(l,mid,d+1);
			tr[no].rs=build(mid+1,r,d+1);
		}
		else
		{
			nth_element(p+l,p+mid,p+r+1,cmp2);
			tr[no].ls=build(l,mid,d+1);
			tr[no].rs=build(mid+1,r,d+1);
		}
		tr[no].lx=min(tr[tr[no].ls].lx,tr[tr[no].rs].lx);
		tr[no].rx=max(tr[tr[no].ls].rx,tr[tr[no].rs].rx);
		tr[no].ly=min(tr[tr[no].ls].ly,tr[tr[no].rs].ly);
		tr[no].ry=max(tr[tr[no].ls].ry,tr[tr[no].rs].ry);
		pushup(no);
		return no;
	}
	bool outof(int a,int b,int c,int d)
	{
		return (b<c)||(a>d);
	}
	void modify(int k,int lx,int rx,int ly,int ry,int v)
	{
		if(outof(tr[k].lx,tr[k].rx,lx,rx)||outof(tr[k].ly,tr[k].ry,ly,ry))return;
		if(lx<=tr[k].lx&&tr[k].rx<=rx&&ly<=tr[k].ly&&tr[k].ry<=ry)
		{
			add_tag(k,v);
			return;
		}
		pushdown(k);
		if(tr[k].ls)modify(tr[k].ls,lx,rx,ly,ry,v);
		if(tr[k].rs)modify(tr[k].rs,lx,rx,ly,ry,v);
		pushup(k);
	}
	bool search(int k)
	{
		if(tr[k].fl!=-1)
		{
			if(tr[k].mx>=_x)
			{
				for(int i=star::he[tr[k].fl];i;i=star::ne[i])
				{
					ans[star::to[i]]=_x;
				}
				tr[k].mx=-INF;
				return true;
			}
			return false;
		}
		pushdown(k);
		bool ret;
		if(tr[tr[k].ls].mx>=tr[tr[k].rs].mx)
		{
			ret=search(tr[k].ls);
		}
		else
		{
			ret=search(tr[k].rs);
		}
		pushup(k);
		return ret;
	}
}
int main()
{
	int n,m,q=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		edge::link(a[i],i);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&l[i],&r[i]);
		g[i]={{l[i],r[i]},i};
	}
	sort(g+1,g+1+m,cmp1);
	for(int i=1;i<=m;i++)
	{
		if(!(g[i]==g[i-1]))
		{
			q++;
			p[q]={{g[i].x[0],g[i].x[1]},q};
		}
		star::link(q,g[i].id);
	}
	int rt=KDT::build(1,q,1);
	for(int i=1;i<=n;i++)KDT::modify(rt,1,i,i,n,1);
	_x=N+1;
	while(_x>=0)
	{
		for(int i=edge::he[_x];i;i=edge::ne[i])
		{
			int j=edge::to[i];
			KDT::modify(rt,1,j,j,n,-1);
		}
		while(KDT::search(rt));
		_x--;
	}
	for(int i=1;i<=m;i++)
	{
		printf("%d\n",ans[i]);
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 7956kb

input:

3 3
0 0 2
1 3
2 3
3 3

output:

3
1
0

result:

ok 3 number(s): "3 1 0"

Test #2:

score: 0
Accepted
time: 0ms
memory: 7756kb

input:

3 2
1 2 2
1 2
1 3

output:

0
3

result:

ok 2 number(s): "0 3"

Test #3:

score: 0
Accepted
time: 5ms
memory: 9964kb

input:

10 10
3 0 3 3 9 7 9 6 0 7
3 3
9 9
4 6
1 9
3 4
2 4
7 10
3 7
5 7
2 7

output:

0
1
0
5
0
1
1
0
0
1

result:

ok 10 numbers

Test #4:

score: 0
Accepted
time: 2ms
memory: 7712kb

input:

10 10
3 0 0 0 5 1 1 1 2 1
1 2
8 8
5 7
1 7
2 2
1 5
5 6
4 6
3 10
6 8

output:

1
0
2
7
1
4
0
2
8
3

result:

ok 10 numbers

Test #5:

score: 0
Accepted
time: 8ms
memory: 7908kb

input:

100 100
15 82 7 39 63 55 64 99 71 63 32 99 67 94 3 43 15 75 45 55 53 4 35 36 15 40 82 20 62 43 6 83 27 95 27 45 98 44 35 98 39 7 17 32 76 7 40 16 40 63 13 8 22 27 11 12 61 14 19 45 100 97 90 88 22 59 25 63 4 25 65 16 22 92 84 44 99 66 89 26 93 97 35 97 92 1 32 40 97 97 78 43 7 12 23 53 61 74 33 90
1...

output:

68
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
48
0
0
0
0
0
0
0
0
0
0
0
0
0
28
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 100 numbers

Test #6:

score: 0
Accepted
time: 9ms
memory: 7696kb

input:

100 100
17 86 33 8 11 27 8 11 13 9 3 43 11 23 26 42 44 12 44 12 15 0 75 51 72 5 49 2 40 57 24 47 39 42 4 5 6 52 3 2 42 19 62 33 24 22 16 69 4 33 44 70 29 11 2 2 58 9 6 10 25 10 33 26 17 3 14 0 48 7 48 51 0 39 54 37 14 9 3 85 18 4 25 9 2 0 39 8 17 13 25 45 10 39 12 18 9 5 66 6
13 89
10 90
42 67
43 52...

output:

76
80
0
0
18
1
18
1
5
5
1
1
22
11
0
15
0
59
5
56
1
80
0
1
1
21
0
61
22
11
0
3
8
15
40
1
8
81
71
20
2
0
60
0
60
31
0
59
0
0
0
28
0
21
1
7
5
0
31
0
76
28
0
0
27
1
23
0
1
27
1
0
0
1
0
5
63
52
2
43
73
1
86
0
61
0
27
2
30
5
31
1
0
14
59
27
1
1
67
63

result:

ok 100 numbers

Test #7:

score: 0
Accepted
time: 6ms
memory: 14080kb

input:

100 100
6 1 1 5 13 11 35 5 3 2 0 4 0 9 1 2 3 3 19 1 7 9 7 11 7 8 10 18 28 17 31 2 4 8 2 3 3 2 22 4 9 4 7 2 9 15 8 2 3 19 5 24 3 10 11 5 9 20 8 4 11 10 18 9 13 34 5 34 2 9 24 6 21 16 6 12 26 2 2 2 6 11 2 14 3 8 2 12 2 19 8 3 18 23 5 21 23 8 4 0
44 67
25 74
24 79
59 73
4 81
42 66
48 55
15 38
35 63
16 ...

output:

22
50
56
0
78
23
0
22
29
24
38
37
17
57
0
6
0
58
52
4
64
44
0
37
75
75
34
89
0
4
0
12
39
0
0
69
53
14
38
13
36
30
0
7
46
83
28
6
44
22
40
50
24
26
36
49
0
0
6
49
27
78
0
37
11
49
16
50
25
30
37
58
64
28
62
36
0
52
0
95
34
4
50
17
0
27
44
0
0
21
44
66
69
0
39
25
0
2
63
0

result:

ok 100 numbers

Test #8:

score: 0
Accepted
time: 4ms
memory: 10016kb

input:

100 100
0 1 0 1 0 1 1 1 0 2 1 1 2 0 1 1 0 3 0 0 0 0 0 0 0 0 1 2 2 0 0 0 0 1 0 0 1 2 0 0 1 0 0 3 0 1 0 0 3 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 4 0 1 1 0 1 0 2 2 0 0 1
41 53
31 36
78 99
60 86
1 67
3 92
89 92
60 70
42 56
42 46
39 84
40 66
9 27
75 78
33 94
17 53...

output:

13
6
22
27
67
90
3
11
15
5
46
27
19
4
62
37
84
35
53
4
47
95
55
63
24
39
22
51
67
21
55
36
24
16
33
74
4
16
63
81
41
14
3
54
6
40
36
33
29
32
14
60
13
17
73
44
34
2
14
79
59
13
75
72
31
10
22
57
23
37
74
2
6
6
38
5
4
62
66
22
33
0
23
21
12
54
75
6
8
16
37
36
3
53
63
18
67
60
31
19

result:

ok 100 numbers

Test #9:

score: -100
Runtime Error

input:

300000 300000
216504 101790 177261 84423 215788 67188 170620 125383 222808 149722 190483 152974 27524 172557 109218 201761 138030 177265 270417 244027 29296 13565 108388 270622 75102 137755 134081 21988 249714 268911 178911 39288 197287 232628 152784 226739 40134 213404 230781 181323 235763 55745 44...

output:


result: