QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#241018#964. Excluded MinThankto_zy6WA 10ms14036kbC++143.4kb2023-11-05 21:57:422023-11-05 21:57:43

Judging History

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

  • [2023-11-05 21:57:43]
  • 评测
  • 测评结果:WA
  • 用时:10ms
  • 内存:14036kb
  • [2023-11-05 21:57:42]
  • 提交

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]={{l[i],r[i]},q};
		}
		star::link(q,i);
	}
	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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 9832kb

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: 9996kb

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: 9996kb

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: 5ms
memory: 14036kb

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: 4ms
memory: 7696kb

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: -100
Wrong Answer
time: 10ms
memory: 9804kb

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
73
86
0
61
0
27
2
30
5
31
1
0
14
59
27
1
1
67
63

result:

wrong answer 82nd numbers differ - expected: '1', found: '73'