QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#645064#8949. 赫露艾斯塔DaiRuiChen0070 3202ms140976kbC++173.6kb2024-10-16 16:44:332024-10-16 16:44:34

Judging History

This is the latest submission verdict.

  • [2024-10-16 16:44:34]
  • Judged
  • Verdict: 0
  • Time: 3202ms
  • Memory: 140976kb
  • [2024-10-16 16:44:33]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
mt19937 rnd(time(0));
struct Treap {
	int x[MAXN],y[MAXN],tx[MAXN],ty[MAXN],pri[MAXN],ls[MAXN],rs[MAXN],siz[MAXN];
	void psu(int p) { siz[p]=siz[ls[p]]+siz[rs[p]]+1; }
	void setx(int p,int k) { x[p]=tx[p]=k; }
	void sety(int p,int k) { y[p]=ty[p]=k; }
	void psd(int p) {
		if(tx[p]) setx(ls[p],tx[p]),setx(rs[p],tx[p]),tx[p]=0;
		if(ty[p]) sety(rs[p],ty[p]),sety(rs[p],ty[p]),ty[p]=0;
	}
	void splix(int p,int k,int &u,int &v) {
		if(!p) return u=v=0,void();
		psd(p);
		if(x[p]<=k) u=p,splix(rs[p],k,rs[p],v),psu(p);
		else v=p,splix(ls[p],k,u,ls[p]),psu(p);
	}
	void spliy(int p,int k,int &u,int &v) {
		if(!p) return u=v=0,void();
		psd(p);
		if(y[p]>=k) u=p,spliy(rs[p],k,rs[p],v),psu(p);
		else v=p,spliy(ls[p],k,u,ls[p]),psu(p);
	}
	void spliz(int p,int k,int &u,int &v) {
		if(!p) return u=v=0,void();
		psd(p);
		if(x[p]-y[p]<=k) u=p,spliz(rs[p],k,rs[p],v),psu(p);
		else v=p,spliz(ls[p],k,u,ls[p]),psu(p);
	}
	int merge(int u,int v) {
//		cerr<<"merge "<<u<<" "<<v<<"\n";
		if(!u||!v) return u|v;
		psd(u),psd(v);
		if(pri[u]<pri[v]) return rs[u]=merge(rs[u],v),psu(u),u;
		else return ls[v]=merge(u,ls[v]),psu(v),v;
	}
	void out(int u) {
		if(!u) return ;
		psd(u),out(ls[u]),printf("(%d,%d) ",x[u],y[u]),out(rs[u]);
	}
}	T;
int n,m,ax[MAXN],ay[MAXN],ux[MAXN],uy[MAXN],qx[MAXN],qy[MAXN],op[MAXN],ans[MAXN];
struct poi { int x,y,id; } a[MAXN<<1];
vector <int> ins[MAXN];
struct Bit1 {
	int tr[MAXN],s;
	void init() { fill(tr+1,tr+n+1,m+1); }
	void upd(int x,int v) { for(;x;x&=x-1) tr[x]=min(tr[x],v); }
	int qry(int x) { for(s=m+1;x<=n;x+=x&-x) s=min(s,tr[x]); return s; }
}	Tmn;
struct Bit2 {
	int tr[MAXN],s;
	void upd(int x,int v) { for(;x;x&=x-1) tr[x]=max(tr[x],v); }
	int qry(int x) { for(s=0;x<=n;x+=x&-x) s=max(s,tr[x]); return s; }
}	Tmx;
struct Bit3 {
	int tr[MAXN],s;
	void add(int x,int v) { for(;x;x&=x-1) tr[x]+=v; }
	int qry(int x) { for(s=0;x<=n;x+=x&-x) s+=tr[x]; return s; }
}	To,Tx,Ty;
signed main() {
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;++i) cin>>ax[i]>>ay[i],a[i]={ax[i],ay[i],i};
	for(int i=1;i<=m;++i) cin>>op[i]>>ux[i]>>uy[i]>>qx[i]>>qy[i],a[i+n]={ux[i],uy[i],i+n};
	sort(a+1,a+n+m+1,[&](poi u,poi v){ return u.x^v.x?u.x>v.x:u.id>v.id; });
	Tmn.init();
	for(int i=1;i<=n+m;++i) {
		if(a[i].id>n) Tmn.upd(a[i].y,a[i].id-n);
		else ins[Tmn.qry(a[i].y)].push_back(a[i].id);
	}
	for(int i=1;i<=n;++i) a[i]={ax[i],ay[i],i};
	for(int i=1;i<=m;++i) a[i]={qx[i],qy[i],i+n};
	sort(a+1,a+n+m+1,[&](poi u,poi v){ return u.x^v.x?u.x>v.x:u.id>v.id; });
	for(int i=1;i<=n+m;++i) {
		if(a[i].id>n) ans[a[i].id-n]=To.qry(a[i].y+1);
		else To.add(a[i].y,1);
	}
	for(int i=1;i<=n;++i) Tx.add(ax[i],1),Ty.add(ay[i],1);
	int rt=0;
	for(int i=1,ot=n;i<=m;++i) {
//		cerr<<"out["<<i<<"] = "<<ans[i]<<"\n";
		int u,o1,o2,o3;
		T.splix(rt,ux[i],o1,o2);
		T.spliy(o1,uy[i]+1,o3,u);
		rt=T.merge(T.merge(o3,u),o2);
		if(u) op[i]==2?T.setx(u,ux[i]):T.sety(u,uy[i]);
		for(int j:ins[i]) {
			Tx.add(ax[j],-1),Ty.add(ay[j],-1),--ot;
//			cerr<<"push "<<j<<"("<<ax[j]<<","<<ay[j]<<")\n";
			op[i]==2?ax[j]=ux[i]:ay[j]=uy[i];
			T.spliz(rt,ax[j]-ay[j],o1,o2);
			T.x[j]=ax[j],T.y[j]=ay[j],T.pri[j]=rnd(),T.siz[j]=1;
			rt=T.merge(T.merge(o1,j),o2);
		}
//		T.out(rt); puts("");
		Tmx.upd(ux[i],uy[i]);
		if(Tmx.qry(qx[i]+1)>qy[i]) { cout<<"0\n"; continue; }
		T.splix(rt,qx[i],o1,o2);
		T.spliy(o1,qy[i]+1,o3,u);
//		cerr<<"siz = "<<T.siz[u]<<", >x = "<<Tx.qry(qx[i]+1)<<", >y = "<<Ty.qry(qy[i]+1)<<"\n";
		ans[i]+=ot+T.siz[u]-Tx.qry(qx[i]+1)-Ty.qry(qy[i]+1);
		cout<<ans[i]<<"\n";
		rt=T.merge(T.merge(o3,u),o2);
	}
	return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 10ms
memory: 34564kb

input:

995 996
950 481
376 18
141 776
711 966
130 727
468 529
47 39
857 563
832 821
776 472
154 914
825 279
332 415
470 361
968 440
45 560
299 755
703 785
744 387
547 382
3 549
344 573
778 424
784 765
280 115
251 434
695 98
463 506
379 38
610 486
305 623
703 244
856 365
117 360
772 847
331 723
663 991
900 ...

output:

795
853
1212
586
1147
505
602
1236
1266
571
695
427
902
36
313
746
1307
1221
1171
252
1066
788
103
1177
178
-440
445
1379
902
834
752
1098
846
960
511
108
387
-380
339
514
519
833
515
1207
693
956
1360
1069
75
-133
9
850
598
510
627
347
679
112
330
674
-353
868
-433
613
781
455
-209
0
262
937
1006
9...

result:

wrong answer 1st numbers differ - expected: '423', found: '795'

Subtask #2:

score: 0
Wrong Answer

Test #9:

score: 0
Wrong Answer
time: 2132ms
memory: 133856kb

input:

999996 999996
921339 140126
955508 363759
958698 342406
280137 955674
907511 75721
189876 946586
152058 168837
541857 557702
84498 865987
185574 809224
704828 701026
815379 548000
989515 518951
335439 336866
745570 790616
766723 212893
926629 859003
51261 40866
592510 556235
324926 700261
320946 798...

output:

0
0
953250
0
0
790970
0
0
0
0
218574
0
0
0
0
-35339
0
0
0
0
0
0
363744
0
0
0
0
0
0
0
0
0
0
0
244722
0
0
-12221
0
0
0
0
21965
0
0
0
6191
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5717
170405
0
0
0
0
0
0
17426
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
-13763
0
0
0
0
0
0
0
21715
0
0
0
0
0
0...

result:

wrong answer 3rd numbers differ - expected: '953730', found: '953250'

Subtask #3:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 3202ms
memory: 140976kb

input:

999995 999997
261379 334440
985281 986034
549380 718157
670003 253925
533027 437989
326806 983213
965935 756259
229069 686789
331338 684961
957559 390618
937820 959719
338153 779814
582581 965418
634156 421264
308778 938878
913059 390904
481477 431492
739774 793015
901442 934600
256704 991485
366691...

output:

231315
950457
171276
288698
419504
628882
901437
-476725
451841
262646
452713
593275
635351
222461
267027
684280
195748
271376
867050
994960
661706
850801
705055
945884
-282139
675958
942897
-287414
743682
68468
953550
499737
565820
420099
806664
1073880
988403
593849
430390
-386798
196647
45678
508...

result:

wrong answer 1st numbers differ - expected: '160635', found: '231315'

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%