QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#420330#4887. Fast BridgesHarry27182AC ✓1816ms41632kbC++143.0kb2024-05-24 16:34:302024-05-24 16:34:31

Judging History

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

  • [2024-05-24 16:34:31]
  • 评测
  • 测评结果:AC
  • 用时:1816ms
  • 内存:41632kb
  • [2024-05-24 16:34:30]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int inv6=166374059,mod=998244353;
int tot1,tot2,n,m,x[1005],y[1005],ans,e[1005][1005],siz[1005],val[1005],dp[2][1005][1005],lst[1005];
struct node{int x1,y1,x2,y2;}a[1005],b[1005];int v[1005][1005];vector<int>mp[1005][1005];
void Add(int &x,int y){x=(x+y>=mod?x+y-mod:x+y);}
bool cmp(node x,node y){return x.y2<y.y2;}
void solve(int m)
{
	tot1=0,tot2=0;
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=m;i++)
	{
		x[++tot1]=a[i].x1+1;x[++tot1]=a[i].x2;
		y[++tot2]=a[i].y1+1;y[++tot2]=a[i].y2;
	}
	x[++tot1]=1;x[++tot1]=n+1;y[++tot2]=1;y[++tot2]=n+1;
	sort(x+1,x+tot1+1);sort(y+1,y+tot2+1);
	tot1=unique(x+1,x+tot1+1)-x-1;tot2=unique(y+1,y+tot2+1)-y-1;
	for(int i=1;i<=tot1;i++)for(int j=1;j<=tot2;j++)mp[i][j].clear();
	for(int i=1;i<=m;i++)
	{
		a[i].x1=lower_bound(x+1,x+tot1+1,a[i].x1+1)-x;
		a[i].x2=lower_bound(x+1,x+tot1+1,a[i].x2)-x;
		a[i].y1=lower_bound(y+1,y+tot2+1,a[i].y1+1)-y;
		a[i].y2=lower_bound(y+1,y+tot2+1,a[i].y2)-y;
		mp[a[i].x1-1][a[i].y1-1].emplace_back(i);
	}
	for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)e[i][j]=-0x3f3f3f3f;
	for(int i=1;i<=m;i++)e[i][i]=0;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(i==j)continue;
			if(a[i].x2<a[j].x1&&a[i].y2<a[j].y1)e[i][j]=1;
		}
	}
	for(int k=1;k<=m;k++)
	{
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=m;j++)e[i][j]=max(e[i][j],e[i][k]+e[k][j]);
		}
	}
	for(int i=1;i<=tot1;i++)for(int j=1;j<=m;j++)dp[0][i][j]=dp[1][i][j]=0;
	for(int i=tot2-1;i>=1;i--)
	{
		int p=i&1,pos=m+1;
		for(int j=tot1-1;j>=1;j--)
		{
			for(int k=1;k<=m;k++)
			{
				dp[p][j][k]=max(dp[p][j+1][k],dp[p^1][j][k]);
			}
			for(int l=0;l<mp[i][j].size();l++)
			{
				int x=mp[i][j][l];
				for(int k=1;k<=m;k++)
				{
					if(e[x][k]<0)continue;
					dp[p][j][k]=max(dp[p][j][k],e[x][k]+1);
				}
			}
			for(int k=1;k<=m;k++)lst[k]=0;
			int res=0;
			while(pos>1&&a[pos-1].y2>=j)pos--;
			for(int k=j,l=pos;k<tot2;k++)
			{
				while(l<=m&&a[l].y2==k)
				{
					int len=x[tot1]-x[a[l].x2],w=dp[p][j][l];l++;
					if(w<=0||lst[w]>=len)continue;
					Add(res,mod-1ll*lst[w]*(y[tot2]-y[k])%mod);
					Add(res,1ll*len*(y[tot2]-y[k])%mod);lst[w]=len;
				}
			}
			Add(ans,1ll*res*(x[i+1]-x[i])%mod*(y[j+1]-y[j])%mod);
		}
	}
}
int main()
{
	//freopen("line.in","r",stdin);
	//freopen("line.out","w",stdout);
	cin.tie(0)->sync_with_stdio(0);
	cin>>m>>n;int flag=0;
	for(int i=1;i<=m;i++)cin>>b[i].x1>>b[i].y1>>b[i].x2>>b[i].y2,flag&=(b[i].y1<b[i].y2);
	for(int i=1;i<m;i++)flag&=(b[i].x2<=b[i+1].x1&&b[i].y2<=b[i+1].y1);
	if(flag==1)
	{
		for(int i=1;i<=m;i++)Add(ans,1ll*b[i].x1*b[i].y1%mod*(n-b[i].x2+1)%mod*(n-b[i].y2+1)%mod);
	}
	else 
	{
		int cnt=0;
		for(int i=1;i<=m;i++)if(b[i].x1!=b[i].x2&&b[i].y1<b[i].y2)a[++cnt]=b[i];
		solve(cnt);cnt=0;
		for(int i=1;i<=m;i++)b[i].y1=n-b[i].y1+1,b[i].y2=n-b[i].y2+1;
		for(int i=1;i<=m;i++)if(b[i].x1!=b[i].x2&&b[i].y1<b[i].y2)a[++cnt]=b[i];
		solve(cnt);
	}
	int res=1ll*n*n%mod*(n-1)%mod*n%mod*(n+1)%mod*inv6%mod*2%mod;
	res=(res-ans+mod)%mod;
	cout<<res;
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

2 2
1 1 2 2
1 2 2 1

output:

6

result:

ok answer is '6'

Test #2:

score: 0
Accepted
time: 3ms
memory: 28004kb

input:

0 1000000000

output:

916520226

result:

ok answer is '916520226'

Test #3:

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

input:

5 5
1 1 3 3
3 3 5 1
3 3 4 5
3 3 5 4
1 5 3 3

output:

946

result:

ok answer is '946'

Test #4:

score: 0
Accepted
time: 3ms
memory: 34660kb

input:

200 5
1 1 4 2
2 5 4 4
2 3 4 2
2 4 3 5
1 4 4 2
2 5 4 2
1 2 4 4
1 2 2 4
1 4 5 1
3 4 5 1
4 2 5 1
2 2 5 4
3 2 5 1
3 1 5 2
4 2 5 3
1 3 5 1
3 4 4 5
2 2 4 3
2 3 5 4
1 4 5 3
2 2 3 1
2 5 3 3
1 1 5 3
4 4 5 5
1 3 4 4
4 3 5 1
2 3 3 4
3 4 4 2
1 4 4 5
2 1 4 4
1 3 5 2
1 1 3 3
1 5 3 1
1 1 3 5
1 4 3 5
4 5 5 4
1 1 4 ...

output:

708

result:

ok answer is '708'

Test #5:

score: 0
Accepted
time: 25ms
memory: 36120kb

input:

500 10
5 6 7 10
1 3 8 10
3 3 4 9
2 10 10 2
9 4 10 10
5 4 7 8
7 1 10 7
3 1 7 10
5 2 8 9
6 3 7 10
3 10 7 9
4 9 5 1
2 5 3 3
7 10 8 2
7 7 9 8
6 6 8 3
5 10 8 8
1 1 5 5
3 3 10 5
5 5 7 6
3 8 4 7
6 7 7 5
7 3 10 9
5 3 9 4
4 6 10 5
1 5 9 10
5 6 9 7
3 10 10 3
1 2 5 7
4 6 5 1
3 1 8 5
5 8 8 9
1 8 4 3
6 4 7 10
7 ...

output:

27373

result:

ok answer is '27373'

Test #6:

score: 0
Accepted
time: 23ms
memory: 34404kb

input:

500 30
3 13 20 29
14 5 16 25
2 29 9 15
23 30 24 9
1 18 24 28
4 16 5 2
3 29 30 25
4 8 24 19
8 26 10 24
20 14 26 25
15 8 25 25
5 13 18 28
3 30 29 10
14 26 25 11
11 19 16 4
9 4 29 30
15 10 16 8
2 29 12 2
11 22 20 28
4 10 28 1
24 17 30 1
8 26 27 9
15 25 30 14
16 20 24 17
9 23 12 13
9 16 25 28
2 15 8 16
...

output:

7717993

result:

ok answer is '7717993'

Test #7:

score: 0
Accepted
time: 32ms
memory: 37724kb

input:

500 100
25 55 55 43
14 22 84 5
57 7 79 15
63 9 86 23
22 3 53 97
2 22 64 65
32 52 66 30
76 37 79 22
46 100 76 22
21 78 78 44
29 41 92 55
43 14 46 3
14 97 42 1
16 7 35 64
15 27 29 3
11 92 92 70
4 13 66 2
3 38 55 82
41 94 83 44
52 90 100 82
6 100 99 70
18 38 24 22
74 17 98 20
17 94 44 82
33 97 48 19
12...

output:

291628571

result:

ok answer is '291628571'

Test #8:

score: 0
Accepted
time: 93ms
memory: 36676kb

input:

500 8
2 4 8 2
3 7 5 4
2 6 8 1
4 8 5 5
6 6 7 5
2 6 5 5
1 6 8 5
6 5 7 3
4 8 5 7
5 7 6 5
1 6 4 5
2 3 4 2
2 8 8 6
3 8 4 3
5 6 7 2
7 8 8 3
1 8 4 7
1 6 6 1
1 8 7 1
1 4 3 3
2 3 3 1
1 4 5 1
1 8 5 4
7 7 8 5
2 7 4 1
3 7 4 3
2 3 5 1
3 7 8 1
4 7 5 5
6 6 8 3
2 7 5 1
2 5 4 3
5 4 8 2
4 5 8 3
2 3 4 1
2 8 3 2
5 6 8 ...

output:

9321

result:

ok answer is '9321'

Test #9:

score: 0
Accepted
time: 387ms
memory: 38872kb

input:

500 1000000000
228604634 522874974 789854111 585676486
340802063 175643637 661594207 749079321
490078806 844144515 583746323 707696611
833939453 901516824 867397264 848066012
553537526 886003963 679012061 187030606
351500555 847099665 751201742 855105070
169763646 729114554 248951243 211939611
17040...

output:

230090667

result:

ok answer is '230090667'

Test #10:

score: 0
Accepted
time: 1476ms
memory: 40876kb

input:

500 1000000000
536804949 618264275 757262973 133194920
206604343 420304040 244005624 331707206
64548973 877773848 685024560 565782395
13572244 271309598 835979107 128627415
128103153 561746493 703898577 9276472
209282309 997406956 216339996 279878227
386095652 999498735 908610032 582414132
232191790...

output:

404991176

result:

ok answer is '404991176'

Test #11:

score: 0
Accepted
time: 1483ms
memory: 41576kb

input:

500 1000000000
435165109 887707979 541968631 834720917
43164344 595179931 731392283 541750474
51147932 885859385 525997101 813310992
581745995 569929983 666239343 349298365
720599913 330436249 751561895 84593980
254142704 924477087 706739688 760929039
282091849 414650019 853811117 121534462
21407507...

output:

174105246

result:

ok answer is '174105246'

Test #12:

score: 0
Accepted
time: 1479ms
memory: 40816kb

input:

500 1000000000
334968963 60182667 683993047 330063742
372714145 727060351 391638535 972082352
15288009 443033033 549932294 626507494
551292358 201286324 844192128 989162325
138957062 834473180 233314539 840742618
774917762 293038146 784290713 868100668
88362426 108423246 90763875 635080794
197409326...

output:

819654628

result:

ok answer is '819654628'

Test #13:

score: 0
Accepted
time: 1487ms
memory: 39740kb

input:

500 1000000000
407797655 600906761 451028876 557753318
739109786 505834673 914488662 267694229
21613693 815099602 741520301 86754775
749426136 864500481 989644055 760004108
97929570 281277866 645537954 194083134
386298407 900097354 590149576 876589970
225981751 604462892 313700311 201620926
13512935...

output:

704804476

result:

ok answer is '704804476'

Test #14:

score: 0
Accepted
time: 384ms
memory: 39396kb

input:

500 1000000000
136588729 322381152 198423052 586895024
146201252 78771798 320963978 33171878
103014217 582579333 112482565 472327049
363500012 171569343 779799989 210605961
916348434 897403875 958218658 848653603
81959275 288412262 293263271 877464982
155884974 409342051 490632310 353856648
42868173...

output:

701057894

result:

ok answer is '701057894'

Test #15:

score: 0
Accepted
time: 394ms
memory: 40128kb

input:

500 1000000000
70732466 818210159 101241592 180120566
551559764 430141447 558477026 919623562
842854549 898003264 988655980 690377539
365038538 842566580 988616538 612555368
119137999 522482797 776356145 341894154
134943863 753491473 621956497 857574689
860979233 313689040 912231580 819779431
253383...

output:

849305849

result:

ok answer is '849305849'

Test #16:

score: 0
Accepted
time: 386ms
memory: 39356kb

input:

500 1000000000
76067493 226360208 588463712 997370258
247139391 228988779 876938260 628658287
173490201 249999131 402004522 332729284
73514885 82656638 357464837 702514607
288650085 526722777 582817141 741491871
859774917 73498480 878952996 868608989
248586909 115745356 485233299 599896403
302539166...

output:

980753674

result:

ok answer is '980753674'

Test #17:

score: 0
Accepted
time: 1816ms
memory: 40408kb

input:

500 919069957
742507159 740217847 742778031 741238898
320301045 312370945 321929532 313537690
344928356 347275650 349920032 348402734
128430402 156747983 128702472 159673979
89940237 122339622 90602165 123930504
638094551 604903042 638437986 606101004
118489244 152414022 121260981 154139858
41785067...

output:

347610358

result:

ok answer is '347610358'

Test #18:

score: 0
Accepted
time: 1807ms
memory: 40788kb

input:

500 975373400
777474465 198550754 778099765 197445181
19790862 954672658 20856536 953636596
827980256 147778510 829125529 145266113
619221505 350128003 619713737 347384388
495799407 482522585 498152766 482508636
228703 974561916 1215128 974398280
950927762 28239912 951166074 26737006
102318845 88350...

output:

486012810

result:

ok answer is '486012810'

Test #19:

score: 0
Accepted
time: 1616ms
memory: 41632kb

input:

500 922966563
115641230 791820491 115936105 794899846
7441550 907396267 7640705 909366228
383643458 561813701 384786914 562843293
133648920 776892573 134236476 777454189
894069150 40941978 895005990 44397450
324914327 613839734 325458987 617562044
258873214 669542178 264432179 670706796
335542470 60...

output:

960969993

result:

ok answer is '960969993'

Test #20:

score: 0
Accepted
time: 1805ms
memory: 39832kb

input:

500 910764856
264127592 56720470 264761335 57473399
300722985 26543922 302659371 27255052
138183869 187609080 138862190 187979768
291616311 30130902 293899822 30820363
695556094 694791215 698236353 694954089
467280215 445331996 467636970 445476250
284124881 43779602 284127311 44232664
41962007 25000...

output:

713510491

result:

ok answer is '713510491'

Test #21:

score: 0
Accepted
time: 1794ms
memory: 40336kb

input:

500 979573708
609141204 607146721 610696466 608279394
823874084 817942635 824585371 820180663
489270955 514116219 489328036 516239321
495039861 510316151 496191240 510346356
93792698 99762142 96167488 101089313
728307491 743698364 728767609 744556149
699640438 714289051 701220727 714709191
969540246...

output:

48547907

result:

ok answer is '48547907'

Test #22:

score: 0
Accepted
time: 1805ms
memory: 40848kb

input:

500 916882629
21679409 888666976 22580401 887884682
513731805 430219378 514021683 429382029
874054006 41169282 874265838 40672160
809383100 112499436 809995521 112152965
64712081 846209768 65282651 843226386
714422089 200913113 714556860 200635656
75987513 837108705 76932484 835968220
476278326 4682...

output:

714815386

result:

ok answer is '714815386'

Test #23:

score: 0
Accepted
time: 1605ms
memory: 39184kb

input:

500 931320321
72830776 877701462 74342638 877848750
636003037 264848119 639364997 265548058
193612336 779255620 194373620 779477385
578168121 322363324 578400968 326005388
38825805 898880469 40203263 905015988
756742998 170233022 757066250 172838258
755348271 172838258 756742998 172877853
736131026 ...

output:

213424131

result:

ok answer is '213424131'

Test #24:

score: 0
Accepted
time: 1785ms
memory: 40572kb

input:

500 979329509
69821921 256609272 70469919 257627970
173525161 144611982 173899337 145831269
264626412 61699867 268907927 62176750
613984745 594054192 614512469 594959116
150079005 169783758 151275372 170290554
51722407 269582440 55377544 270942474
376727322 345350604 378115806 345466294
85020126 239...

output:

47584657

result:

ok answer is '47584657'

Test #25:

score: 0
Accepted
time: 1796ms
memory: 39760kb

input:

500 1000000000
485693465 516211409 485912714 516973410
938324095 934537458 938706506 935778180
4795255 5758833 5876300 6592813
728990139 742791305 729114300 744227594
542623214 455296103 543512069 459370537
374403011 399544721 374963538 401727773
486887579 515784733 487983003 516142429
489364758 514...

output:

423919980

result:

ok answer is '423919980'

Test #26:

score: 0
Accepted
time: 1410ms
memory: 40912kb

input:

500 912341224
144379066 673547749 669384129 283688094
23539670 725882660 750816322 203471164
418803417 673520348 737628540 163908006
6270951 521384837 462562498 153003869
231214105 541803926 563975158 121930873
132842680 794459578 870125331 420287158
309019214 862048485 650635777 364090983
454187476...

output:

308116414

result:

ok answer is '308116414'

Test #27:

score: 0
Accepted
time: 1520ms
memory: 40964kb

input:

500 919106079
662409376 846520697 812881847 914305772
60175164 9168336 269816548 72403485
433232749 809076323 609707741 893898338
471320095 58738634 703241122 273784800
10443474 52298522 114422435 186769113
541534935 23031109 746778789 177929962
530526833 312365082 682290498 465863465
452230666 4859...

output:

248496841

result:

ok answer is '248496841'

Test #28:

score: 0
Accepted
time: 1552ms
memory: 40428kb

input:

500 988821311
38175266 941839724 110346184 854117993
921616860 850409881 955275599 781534551
145485381 244655421 222146780 179337186
716949607 227179374 814064624 143763255
294983411 237656071 389386161 187137616
386976403 129100041 439846988 49736308
257590835 130558630 331478953 51836827
890157300...

output:

727869974

result:

ok answer is '727869974'

Test #29:

score: 0
Accepted
time: 1661ms
memory: 40236kb

input:

500 962907135
127389469 484571955 127969761 485068566
307544943 749084814 308095025 750557986
752063848 56749023 754446068 56799256
646679554 782269328 647061587 786420413
888133292 376060790 889999988 376440333
574727751 36817586 575355564 38361342
856620318 945086092 857483465 946897975
909807323 ...

output:

353647678

result:

ok answer is '353647678'

Test #30:

score: 0
Accepted
time: 1686ms
memory: 39980kb

input:

500 975071090
745267943 143349830 745449998 143772866
870160763 254458675 872454160 259520494
703634471 738671840 704276263 738758463
343042933 201997565 350737009 203375886
959426775 111952749 960164748 114837129
524447125 816407 525095911 862505
705473426 638645947 707793077 639226335
647724798 63...

output:

452549048

result:

ok answer is '452549048'