QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#831965#8951. 澡堂275307894a30 263ms423684kbC++144.4kb2024-12-25 18:19:302024-12-25 18:19:55

Judging History

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

  • [2024-12-25 18:19:55]
  • 评测
  • 测评结果:30
  • 用时:263ms
  • 内存:423684kb
  • [2024-12-25 18:19:30]
  • 提交

answer

#include<bits/stdc++.h>
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define eb emplace_back
#define all(x) x.begin(),x.end()
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;
const int N=1e6+5,M=(1<<28)+5,K=1000+5,mod=1e9+7,Mod=mod-1;const db eps=1e-9;const int INF=1e9+7;mt19937 rnd(28382);
#define Tp template<typename T>
#define Ts template<typename T,typename... Ar>
namespace Debug{
	Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;}
	Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
	#ifdef LOCAL
	#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
	#else 
	#define gdb(...) void()
	#endif
}using namespace Debug;
int n,m,q,T,X[N],Y[N],pt[N],A[N];
ll ans[N];
ll mx[N];
struct DS{
	ll ms[N],sum[N],qsum[N];
	ll st[20][N];int siz[20][N];
	int k;
	void build(int kk){
		k=kk;
		ms[0]=-1e18;
		for(int i=1;i<=n;i++){
			ms[i]=ms[i-1],sum[i]=sum[i-1];
			if(i%m==k){
				if(ms[i]<A[i]) ms[i]=A[i]+T;
				else sum[i]+=ms[i]-A[i],ms[i]+=T;
			}
		}
		for(int i=1;i<=n;i++){
			qsum[i]=qsum[i-1];
			if(i%m==k) st[0][i]=A[i],siz[0][i]=1,qsum[i]+=A[i];
			else st[0][i]=-1e18,siz[0][i]=0;
		}
		for(int i=1;(1<<i)<=n;i++){
			for(int j=1;j+(1<<i)-1<=n;j++){
				st[i][j]=max(st[i-1][j],st[i-1][j+(1<<i-1)]-1ll*T*siz[i-1][j]);
				siz[i][j]=siz[i-1][j]+siz[i-1][j+(1<<i-1)];
			}
		}
	}
	void jump(int i,int &q,int r){
		for(int j=19;~j;j--){
			if(q+(1<<j)-1<=r&&st[j][q]<=mx[i]){
				ans[i]+=(mx[i]+1ll*(siz[j][q]-1)*T+mx[i])*siz[j][q]/2-(qsum[q+(1<<j)-1]-qsum[q-1]);
				mx[i]+=1ll*siz[j][q]*T;
				q+=(1<<j);
			}
		}
	}
	vector<pii> Q[N];
	ll w[N],ssum[N];
	int s[N],sh;
	void calc(){
		for(int i=1;i<=n;i++) if(i%m==k) w[i]=A[i]-1ll*i/m*T;
		s[sh=0]=n+m;while(s[sh]%m!=k) s[sh]--;
		for(int i=n;i;i--){
			if(i%m==k){
				while(sh&&w[s[sh]]<w[i]) sh--;
				s[++sh]=i;
				int siz=(s[sh-1]-i)/m;
				ssum[sh]=ssum[sh-1]+(A[i]+A[i]+1ll*(siz-1)*T)*siz/2-(qsum[min(s[sh-1]-1,n)]-qsum[i-1]);
			}
			for(auto [y,id]:Q[i]){
				int l=0,r=sh,mid;
				while(l+1<r) mid=l+r>>1,(s[mid]<=y?r:l)=mid;
				int siz=(y-s[r])/m+1;
				mx[id]=A[s[r]]+1ll*siz*T;
				ans[id]+=ssum[sh]-ssum[r]+(A[s[r]]+A[s[r]]+1ll*(siz-1)*T)*siz/2-(qsum[y]-qsum[s[r]-1]);
				/*ll mx=-1e18;
				for(int j=i;j<=y;j++) if(j%m==k){
					if(A[j]>mx) mx=A[j]+T;
					else ans[id]+=mx-A[j],mx+=T;
				}
				::mx[id]=mx;
				gdb(id,mx);*/
			}
			Q[i].clear();
		}
	}

}f[5];
void Solve(){
	scanf("%d%d%d%d",&n,&m,&q,&T);
	for(int i=1;i<=n;i++) scanf("%d",&A[i]);
	for(int i=1;i<=q;i++) scanf("%d%d",&X[i],&Y[i]);
	for(int i=0;i<m;i++) f[i].build(i);
	for(int k=0;k<m;k++){
		for(int i=1;i<=q;i++){
			auto merge=[&](int x){
				if(mx[i]<x) mx[i]=x+T;
				else ans[i]+=mx[i]-x,mx[i]+=T;
			};
			if(Y[i]>=A[X[i]]){
				pt[i]=UB(A+1,A+n+1,Y[i])-A-1;
				ans[i]+=f[k].sum[X[i]-1];
				mx[i]=f[k].ms[X[i]-1]; 
				int q=X[i]+1;
				f[(k+1)%m].jump(i,q,pt[i]);
				if(q<=pt[i]) f[(k+1)%m].Q[q].emplace_back(pt[i],i),gdb(q,pt[i]);
				// for(int j=q;j<=pt[i];j++) if((j-1)%m==k) merge(A[j]);
				// gdb(i,mx[i]);
			}else{
				pt[i]=LB(A+1,A+n+1,Y[i])-A;
				mx[i]=f[k].ms[pt[i]-1];ans[i]+=f[k].sum[pt[i]-1];
				if(pt[i]%m==k) merge(Y[i]);
				int q=pt[i];
				f[(k-1+m)%m].jump(i,q,X[i]-1);
				if(q<X[i]) f[(k-1+m)%m].Q[q].emplace_back(X[i]-1,i);
				// for(int j=q;j<=pt[i];j++) if((j-1)%m==k) merge(A[j]);
			}
		}
		f[(k+1)%m].calc();f[(k-1+m)%m].calc();
		for(int i=1;i<=q;i++){
			auto merge=[&](int x){
				if(mx[i]<x) mx[i]=x+T;
				else ans[i]+=mx[i]-x,mx[i]+=T;
			};
			if(Y[i]>=A[X[i]]){
				if(pt[i]%m==k) merge(Y[i]);
				int q=pt[i]+1;
				f[k].jump(i,q,n);
				if(q<=n) f[k].Q[q].emplace_back(n,i);
				// for(int j=q;j<=n;j++) if(j%m==k) merge(A[j]);
			}else{
				int q=X[i]+1;
				f[k].jump(i,q,n);
				if(q<=n) f[k].Q[q].emplace_back(n,i);
				// for(int j=q;j<=n;j++) if(j%m==k) merge(A[j]);
			}
		}
		f[k].calc();
	}
	for(int i=1;i<=q;i++) printf("%lld\n",ans[i]);
}
int main(){
	int t=1;
	// scanf("%d",&t);
	while(t--) Solve();
	cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 15ms
memory: 364652kb

input:

1000 5 1000 1969617
59993 133807 154199 240894 438118 483699 540258 892751 922552 1049554 1092961 1153394 1287745 1315664 1372758 1550447 1634967 1817853 1825455 2023239 2064188 2117896 2250036 2453036 2492474 2794776 2917935 3047993 3153958 3163156 3237767 3443614 3664074 3716235 3801008 3822067 40...

output:

145473107761
145400375427
145403718605
145444938654
145438908460
145436948885
145405212826
145454120934
145460664260
145458475414
145433391640
145459823384
145401672860
145361079139
145486629489
145451768180
145426177956
145368877047
145384484360
145392373415
145514759762
145437334277
145471143810
1...

result:

ok 1000 lines

Test #2:

score: 10
Accepted
time: 23ms
memory: 366704kb

input:

1000 5 1000 36167
8215 12748 13176 18886 28740 44382 48915 49343 55053 64907 80549 85082 85510 91220 101074 116716 121249 121677 127387 137241 152883 157416 157844 163554 173408 189050 193583 194011 199721 209575 225217 229750 230178 235888 245742 261384 265917 266345 272055 281909 297551 302084 302...

output:

5383542
4273384
5583092
4487507
4540778
5739420
4991040
4831250
8044764
4747488
4297386
7059595
4985536
7791557
4450596
5708031
4408748
5511682
3977461
5126955
4570217
3960587
6060994
4619639
6617992
5548191
4048923
4200581
5648172
4915001
6247217
3840511
5690071
5159446
3355278
5730086
4592285
4686...

result:

ok 1000 lines

Test #3:

score: 10
Accepted
time: 19ms
memory: 366760kb

input:

1000 5 1000 26455
5755 9335 12488 13480 16017 32210 35790 38943 39935 42472 58665 62245 65398 66390 68927 85120 88700 91853 92845 95382 111575 115155 118308 119300 121837 138030 141610 144763 145755 148292 164485 168065 171218 172210 174747 190940 194520 197673 198665 201202 217395 220975 224128 225...

output:

3759363
2722461
1547992
1048857
2015166
2141100
1365260
3621432
2012670
2816278
953073
910376
959437
3872474
2174732
3202845
2220674
3598113
1366417
1009053
896353
856859
1073992
4270759
2501724
1112987
1322084
1846494
2453774
3339534
1661853
1633223
3031189
4018416
1709729
4499620
1118329
3768062
3...

result:

ok 1000 lines

Test #4:

score: 10
Accepted
time: 12ms
memory: 368712kb

input:

1000 5 1000 16722
3139 3641 7653 10814 14321 19860 20362 24374 27535 31042 36581 37083 41095 44256 47763 53302 53804 57816 60977 64484 70023 70525 74537 77698 81205 86744 87246 91258 94419 97926 103465 103967 107979 111140 114647 120186 120688 124700 127861 131368 136907 137409 141421 144582 148089 ...

output:

3512079
3034475
2734835
1941064
2519290
2440084
3414880
4562356
3334182
4126409
4618632
2050759
3791748
2933951
2726789
4788327
4132574
2963481
3636642
3025088
2699802
2034322
3616015
3451068
3111762
2892910
2940932
3444821
3086673
2603997
2440367
2753422
3618666
2391844
3572522
2602010
3080548
3836...

result:

ok 1000 lines

Test #5:

score: 10
Accepted
time: 15ms
memory: 370812kb

input:

1000 5 1000 60555
14667 19173 23801 42385 55686 75221 79727 84355 102939 116240 135775 140281 144909 163493 176794 196329 200835 205463 224047 237348 256883 261389 266017 284601 297902 317437 321943 326571 345155 358456 377991 382497 387125 405709 419010 438545 443051 447679 466263 479564 499099 503...

output:

10089512
17345531
7817544
13187454
10823659
10325209
13800175
11316499
12145244
12378466
11235075
13238408
18390405
9571104
15996985
7081670
14198216
16953216
10752423
8494916
17169941
7074729
9619075
16441956
14197611
15099449
9910334
12491708
13648701
9675595
10825715
9884233
13371337
15375812
824...

result:

ok 1000 lines

Subtask #2:

score: 20
Accepted

Test #6:

score: 20
Accepted
time: 230ms
memory: 408268kb

input:

1000000 1 100000 1165
83 197 266 277 299 529 538 601 629 760 792 1081 1208 1211 1387 1726 1873 1932 2198 2437 2448 2584 2715 2813 3113 3169 3207 3386 3934 4013 4032 4057 4137 4213 4396 4666 4754 4786 4856 4917 4966 5054 5124 5151 5196 5505 5548 5583 5730 5763 6031 6161 6169 6372 6446 6517 6712 6744 ...

output:

532526465394304
532526382684731
532526432382169
532526335149396
532526336776485
532526441654485
532526419072018
532526448365904
532526461590885
532526446716107
532526451559614
532526448428416
532526467783803
532526436578785
532526455446447
532526418608776
532526437618228
532526421765463
532526361938...

result:

ok 100000 lines

Test #7:

score: 20
Accepted
time: 229ms
memory: 414360kb

input:

1000000 1 100000 320
81 176 196 266 277 418 437 447 561 667 671 686 708 916 945 987 1077 1147 1343 1447 1459 1622 1739 1821 1907 2052 2211 2334 2483 2502 2553 2681 2879 2899 2996 3003 3075 3089 3141 3197 3312 3411 3450 3488 3525 3711 3870 4033 4066 4103 4216 4290 4341 4406 4500 4578 4600 4655 4697 4...

output:

110078125101649
110078095701794
110078065549730
110078084700891
110078055599406
110078147872941
110078125921229
110078050034681
110078131570282
110078020684010
110078081392840
110078123741061
110078124999461
110078092777746
110078093138994
110078104230505
110078088736720
110078130160314
110078088020...

result:

ok 100000 lines

Test #8:

score: 20
Accepted
time: 240ms
memory: 413412kb

input:

1000000 1 100000 6
1 7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103 109 115 121 127 133 139 145 151 157 163 169 175 181 187 193 199 205 211 217 223 229 235 241 247 253 259 265 271 277 283 289 295 301 307 313 319 325 331 337 343 349 355 361 367 373 379 385 391 397 403 409 415 421 427 433 439 445 ...

output:

5553833
8401453
8535183
8590839
6718701
6182541
5451207
4876437
6914671
6145580
8711335
8930675
5425001
5823370
6065908
7711946
7515358
5634147
4547534
5257419
6534174
5697110
6912866
4423285
8364102
6852541
6022633
6206653
5816343
6654555
6229974
8683850
5257837
5409556
4751045
5008105
6904326
4916...

result:

ok 100000 lines

Test #9:

score: 20
Accepted
time: 263ms
memory: 423684kb

input:

1000000 1 100000 16
16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 256 272 288 304 320 336 352 368 384 400 416 432 448 464 480 496 512 528 544 560 576 592 608 624 640 656 672 688 704 720 736 752 768 784 800 816 832 848 864 880 896 912 928 944 960 976 992 1008 1024 1040 1056 1072 1088 1104 112...

output:

22191202
14316263
14215908
12574050
16955717
13552137
12066124
20974476
13340915
17693977
14052719
24225895
16771725
13796572
20050839
23326520
17991222
14412732
20532603
23738604
21615231
20091979
17370185
12410457
17205185
19921674
18529918
11452550
17698666
15112642
12609850
11971897
14779852
168...

result:

ok 100000 lines

Test #10:

score: 20
Accepted
time: 203ms
memory: 420040kb

input:

1000000 1 100000 7
5 12 19 26 33 40 47 54 61 68 75 82 89 96 103 110 117 124 131 138 145 152 159 166 173 180 187 194 201 208 215 222 229 236 243 250 257 264 271 278 285 292 299 306 313 320 327 334 341 348 355 362 369 376 383 390 397 404 411 418 425 432 439 446 453 460 467 474 481 488 495 502 509 516 ...

output:

6897928
10959197
5040880
7975693
6574287
5036014
10306570
9137913
8958373
4228311
7449261
9379706
9146142
10274232
4463961
10029845
7326894
7032260
6825277
5928071
8814749
4913978
8495037
6832887
4636661
12079588
3444995
7897528
7682909
5806085
10906552
7559878
8880934
10407655
7267429
3731886
11463...

result:

ok 100000 lines

Test #11:

score: 20
Accepted
time: 224ms
memory: 417468kb

input:

1000000 1 100000 54
10 62 114 166 218 270 322 374 426 478 530 582 634 686 738 790 842 894 946 998 1050 1102 1154 1206 1258 1310 1362 1414 1466 1518 1570 1622 1674 1726 1778 1830 1882 1934 1986 2038 2090 2142 2194 2246 2298 2350 2402 2454 2506 2558 2610 2662 2714 2766 2818 2870 2922 2974 3026 3078 31...

output:

999990099478
1000020712128
1000023784105
1000000426030
999967051898
1000028186354
1000005137696
1000007459992
999999989667
999972101077
1000003394026
1000016044861
1000002942535
999992373042
1000012218653
1000015238310
1000007382600
1000004402650
999992394498
999986392430
999993975864
1000011983527
...

result:

ok 100000 lines

Test #12:

score: 20
Accepted
time: 211ms
memory: 418032kb

input:

1000000 1 100000 40
17 56 95 134 173 212 251 290 329 368 407 446 485 524 563 602 641 680 719 758 797 836 875 914 953 992 1031 1070 1109 1148 1187 1226 1265 1304 1343 1382 1421 1460 1499 1538 1577 1616 1655 1694 1733 1772 1811 1850 1889 1928 1967 2006 2045 2084 2123 2162 2201 2240 2279 2318 2357 2396...

output:

500000527303
500000746017
499967503978
500007250648
500005291749
500004629820
499983324151
499980266264
499966351112
499993188438
500015774244
500004766707
499984969155
500018391637
500014807762
500009826386
500035131469
500022545533
499984841379
500022609759
499990934990
499995147709
500010680726
4...

result:

ok 100000 lines

Test #13:

score: 20
Accepted
time: 227ms
memory: 418212kb

input:

1000000 1 100000 54
35 88 141 194 247 300 353 406 459 512 565 618 671 724 777 830 883 936 989 1042 1095 1148 1201 1254 1307 1360 1413 1466 1519 1572 1625 1678 1731 1784 1837 1890 1943 1996 2049 2102 2155 2208 2261 2314 2367 2420 2473 2526 2579 2632 2685 2738 2791 2844 2897 2950 3003 3056 3109 3162 3...

output:

500002386443
499998979458
500011664725
500011341783
499993738944
500004137954
499981112418
499987830081
499991311719
500004379267
499986707484
500042817877
499981806306
500036313060
500006113447
499999655472
499958926623
499989600304
499950957577
499984617021
500009243539
500021262926
500017351824
4...

result:

ok 100000 lines

Test #14:

score: 20
Accepted
time: 200ms
memory: 413512kb

input:

1000000 1 100000 15
4 18 32 46 60 74 88 102 116 130 144 158 172 186 200 214 228 242 256 270 284 298 312 326 340 354 368 382 396 410 424 438 452 466 480 494 508 522 536 550 564 578 592 606 620 634 648 662 676 690 704 718 732 746 760 774 788 802 816 830 844 858 872 886 900 914 928 942 956 970 984 998 ...

output:

499999793763
500007843697
500005513979
500003594502
499996074937
499998537725
500004096012
500008735454
500004152454
500000568751
500010494658
500002699071
500012815225
499998928026
499999283522
500001200708
499997849850
499998173565
500000907455
499995094179
499996774856
500006115706
499997754467
4...

result:

ok 100000 lines

Test #15:

score: 20
Accepted
time: 205ms
memory: 415612kb

input:

1000000 1 100000 76
2 77 152 227 302 377 452 527 602 677 752 827 902 977 1052 1127 1202 1277 1352 1427 1502 1577 1652 1727 1802 1877 1952 2027 2102 2177 2252 2327 2402 2477 2552 2627 2702 2777 2852 2927 3002 3077 3152 3227 3302 3377 3452 3527 3602 3677 3752 3827 3902 3977 4052 4127 4202 4277 4352 44...

output:

499996922050
500001749644
499980553306
500033080378
499998189130
500013317917
500020273296
500036473243
499964461766
499993953371
499959801684
499968725060
499992480175
500055261991
499970920571
499967171328
500029720775
500055057585
500023488143
500020848450
499964139384
500021829831
499986689677
4...

result:

ok 100000 lines

Subtask #3:

score: 0
Memory Limit Exceeded

Dependency #2:

100%
Accepted

Test #16:

score: 0
Memory Limit Exceeded

input:

1000000 2 100000 1216
85 163 231 310 406 408 702 751 766 809 902 1012 1108 1232 1268 1688 1758 1824 1864 1865 1895 2035 2113 2140 2178 2298 2381 2634 2697 2784 2842 2853 3003 3120 3195 3204 3583 3586 3676 3680 3718 3826 3829 3870 3955 4042 4054 4100 4148 4252 4265 4369 4556 4575 4620 4661 4720 4875 ...

output:

254084390246421
254084444514764
254084291531315
254084384142563
254084409477840
254084335263872
254084322181731
254084347041244
254084434280345
254084374896618
254084355545069
254084362882291
254084400729316
254084301746015
254084404602665
254084351045759
254084343174263
254084318809635
254084321500...

result:


Subtask #4:

score: 0
Memory Limit Exceeded

Dependency #1:

100%
Accepted

Test #26:

score: 0
Memory Limit Exceeded

input:

200000 5 50000 8448
68 1932 1956 2079 2363 3189 3837 3927 4312 4516 4526 4753 6972 7443 8556 9446 10246 11909 12189 12533 12576 12675 12739 13333 14022 14534 14827 15649 15946 16794 17011 17202 18405 18566 18855 19263 19294 19432 19934 19935 20100 20117 21221 21435 21437 21790 21956 21978 23322 2500...

output:

23828443987602
23828386511525
23828440401453
23828432234782
23828417976119
23828465058207
23828422731188
23828448201551
23828420115069
23828364736773
23828478665752
23828417536212
23828505579302
23828462228237
23828437377836
23828428117390
23828456395176
23828446664885
23828487887278
23828449221903
...

result:


Subtask #5:

score: 0
Memory Limit Exceeded

Test #36:

score: 0
Memory Limit Exceeded

input:

1000000 5 100000 1887
112 168 223 393 535 558 577 631 631 678 682 1043 1099 1268 1337 1396 1437 1472 1510 1587 1804 1984 2013 2290 2294 2392 2474 2547 2694 2717 2742 2841 2880 2906 2985 3030 3047 3064 3108 3275 3375 3440 3451 3488 3950 3957 3963 4047 4086 4335 4378 4448 4490 4544 4622 4864 4875 4897...

output:

138785143191754
138785158412509
138785225283652
138785104800924
138785118976960
138785112934741
138785059838322
138785084952748
138785129256978
138785072292366
138785090484906
138785174307446
138785204546881
138785189045551
138785131284055
138785130779155
138785104455009
138785163776264
138785127154...

result:


Subtask #6:

score: 0
Skipped

Dependency #3:

0%