QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#403772#8229. 栈flying#24 284ms31504kbC++143.0kb2024-05-02 18:42:172024-05-02 18:42:18

Judging History

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

  • [2024-05-02 18:42:18]
  • 评测
  • 测评结果:24
  • 用时:284ms
  • 内存:31504kb
  • [2024-05-02 18:42:17]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N=1e5+5;

struct node
{
	int l,r,suml,sumr,minsum,cnt,ans;
};

struct Add
{
	int pos,suml,sumr,ans;
};

vector <int> que[N];
vector <Add> add[N];
node res[N*4];
int val[N];
bool isque[N];

int calccnt(int rt,int val)
{
	if(res[rt].l==res[rt].r)
	{
		if(res[rt].sumr<=0)
			return 0;

		return max(0ll,min(res[rt].sumr,val)-res[rt].suml+1);
	}

	if(res[rt*2+1].minsum+res[rt*2].sumr<=val)
		return res[rt].cnt-res[rt*2+1].cnt+calccnt(rt*2+1,val-res[rt*2].sumr);
	return calccnt(rt*2,val);
}

int calcans(int rt,int val)
{
	if(res[rt].l==res[rt].r)
	{
		if(res[rt].sumr<=0)
			return 0;

		return max(0ll,min(res[rt].sumr,val)-res[rt].suml+1)*(res[rt].ans/(res[rt].sumr-res[rt].suml+1));
	}

	if(res[rt*2+1].minsum+res[rt*2].sumr<=val)
		return res[rt].ans-res[rt*2+1].ans+calcans(rt*2+1,val-res[rt*2].sumr);
	return calcans(rt*2,val);
}

node pushup(int rt,node r)
{
	node ans;
	ans.l=res[rt].l, ans.r=r.r;
	ans.suml=res[rt].suml, ans.sumr=res[rt].sumr+r.sumr;
	ans.minsum=min(res[rt].minsum,res[rt].sumr+r.minsum);
	ans.cnt=r.cnt+calccnt(rt,res[rt].sumr+r.minsum);
	ans.ans=r.ans+calcans(rt,res[rt].sumr+r.minsum);
	return ans;
}

void update(int rt,int pos,int suml,int sumr,int ans)
{
	if(res[rt].l==res[rt].r)
	{
		res[rt].suml=suml, res[rt].sumr=sumr, res[rt].ans=ans, res[rt].minsum=min(suml,sumr);
		if(res[rt].sumr<=0)
			res[rt].cnt=0;
		else
			res[rt].cnt=res[rt].sumr-res[rt].suml+1;

		return;
	}

	int mid=(res[rt].l+res[rt].r)/2;
	if(pos<=mid)
		update(rt*2,pos,suml,sumr,ans);
	else
		update(rt*2+1,pos,suml,sumr,ans);
	res[rt]=pushup(rt*2,res[rt*2+1]);
}

void build(int rt,int l,int r)
{
	res[rt].l=l, res[rt].r=r;
	if(l==r)
		return;

	int mid=(l+r)/2;
	build(rt*2,l,mid);
	build(rt*2+1,mid+1,r);
}

void query(int rt,int l,int r,node& now)
{
	if(l<=res[rt].l && res[rt].r<=r)
	{
		if(res[rt].r==r)
			now=res[rt];
		else
			now=pushup(rt,now);
		return;
	}

	int mid=(res[rt].l+res[rt].r)/2;
	if(mid+1<=r)
		query(rt*2+1,l,r,now);
	if(l<=mid)
		query(rt*2,l,r,now);
}

signed main()
{
	int n,m;
	cin >> n >> m;
	for(int i=1;i<=m;i++)
	{
		int op;
		scanf("%lld",&op);
		if(op==1)
		{
			int l,r,x,y;
			scanf("%lld %lld %lld %lld",&l,&r,&x,&y);
			add[l].push_back((Add){i,1,x,x*y});
			add[r+1].push_back((Add){i,0,0,0});
		}
		else if(op==2)
		{
			int l,r,x;
			scanf("%lld %lld %lld",&l,&r,&x);
			add[l].push_back((Add){i,-1,-x,0});
			add[r+1].push_back((Add){i,0,0,0});
		}
		else
		{
			int k,p,q;
			scanf("%lld %lld %lld",&k,&p,&q);
			que[k].push_back(i);
		}
	}

	build(1,1,m);
	for(int i=1;i<=n;i++)
	{
		for(auto x:add[i])
			update(1,x.pos,x.suml,x.sumr,x.ans);

		for(auto x:que[i])
		{
			node ans;
			query(1,1,x,ans);
			val[x]=ans.ans;
			isque[x]=true;
		}
	}

	for(int i=1;i<=m;i++)
		if(isque[i])
			printf("%lld\n",val[i]);
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 9672kb

input:

4907 4910
2 763 3330 1
3 307 1 1
1 2262 3430 22699 89397
1 1915 4000 51541 67587
2 212 2990 9763
2 1086 2162 1
2 1813 4496 16760
1 51 2796 68005 99390
1 1267 1519 74236 66178
3 1768 23808 54314
2 900 4122 27758
3 3287 17350 28989
2 3277 4024 3633
2 444 4866 1
2 353 4219 1061
1 987 3141 99906 17320
2...

output:

0
6759016950
2503886004
2760518830
3868951467
354681012
846632703
354681012
10108364670
354681012
0
0
0
3868951467
988147924
3978452244
2410632174
7881749052
0
7605940517
7220289528
6289598490
4906605860
10331222926
7725540960
1630130496
1825192597
0
7756309360
12105053806
13390658313
1353121416
720...

result:

wrong answer 2nd numbers differ - expected: '3032090730', found: '6759016950'

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 189ms
memory: 29272kb

input:

99999 99998
1 5026 18575 27178 90423
3 30623 1 1
3 76936 1 1
1 77021 95683 84664 24734
1 46085 74886 40512 11266
3 5048 8594 22468
1 53318 77721 97151 70784
1 70645 91192 37556 13013
1 56752 56940 91812 62887
1 7928 34576 87339 69404
3 74875 32807 100970
3 22338 17221 25771
3 21421 20602 57957
3 717...

output:

0
0
2457516294
7821860804
6061675956
6061675956
7821860804
8519192250
456408192
6061675956
6061675956
10318649388
23648590281
17174794326
15463358481
40383014870
8621531033
19030351911
37436785215
25442285198
54101779334
1799457138
50423131310
28896433183
32968951471
26662685122
10496552948
87827624...

result:

wrong answer 3rd numbers differ - expected: '1254619125', found: '2457516294'

Subtask #3:

score: 0
Wrong Answer

Test #12:

score: 0
Wrong Answer
time: 202ms
memory: 30236kb

input:

100000 99993
1 47773 70467 16065 1
2 52349 78446 2304
3 40821 1 1
1 40216 93069 78144 1
1 41089 43671 76025 1
2 35263 68629 31066
3 79881 13534 57327
3 5556 1 1
2 21962 38192 1
1 664 58116 9417 1
3 28089 6039 7989
2 88500 90302 9946
3 63215 49410 60770
2 11069 89527 57581
2 70303 97603 12363
1 3420 ...

output:

0
78144
0
9417
60839
3258
3258
98785
30831
78413
148040
69435
177077
218068
185702
207689
337992
0
106367
84295
0
227540
89645
144375
60327
338557
394584
57781
307420
67036
41845
546969
108881
757810
108881
349849
419147
160862
354912
396070
31681
148050
88269
0
5240
495886
243577
412568
0
243576
52...

result:

wrong answer 2nd numbers differ - expected: '43794', found: '78144'

Subtask #4:

score: 24
Accepted

Test #17:

score: 24
Accepted
time: 210ms
memory: 30236kb

input:

99999 99996
3 77889 1 10000000000
1 6316 86327 89644 386
3 9260 1 10000000000
2 2603 47234 69717
2 20260 73011 19290
2 62477 81233 26127
1 50140 68508 37004 98794
2 14449 22788 16063
1 43860 84932 50375 21777
1 67345 94584 28202 66610
2 661 68654 1
1 14411 94422 82738 61196
1 16563 94416 4920 38408
...

output:

0
34602584
0
0
27739639583
1363823412
0
1902514434
1902514434
2147553884
1902514434
15794375094
0
4192446657
15797478185
13141921145
0
6351944090
5775183021
363222594
1995572111
2193350882
0
6843261316
5508935691
250667843
0
14181223499
7734049978
21958753162
12852564544
4496343819
15011219087
11331...

result:

ok 33196 numbers

Test #18:

score: 24
Accepted
time: 220ms
memory: 30228kb

input:

99993 100000
3 61460 1 10000000000
1 24890 92871 3803 26680
1 13860 37123 61687 5252
1 8370 24754 70468 14033
3 89253 1 10000000000
3 19857 1 10000000000
1 46250 80211 68621 64496
2 51133 69614 60852
1 6552 42728 61410 66775
3 16111 1 10000000000
3 48406 1 10000000000
2 46319 62460 3834
3 11455 1 10...

output:

0
101464040
1312857568
5413510318
4527244056
5089530194
4526096914
0
4475006240
7393292878
6354306906
5962661320
1073478334
14785061024
124598326
5273378126
3143834350
5315386486
567431731
3354264361
0
8452414800
16197376342
15594421332
7644906667
10259594309
15786872317
21575834611
25614641754
0
56...

result:

ok 33334 numbers

Test #19:

score: 24
Accepted
time: 257ms
memory: 30376kb

input:

99998 99996
3 40534 1 10000000000
1 89230 99016 8691 49307
1 73075 80610 27269 1760
1 80632 96125 13027 41376
1 55057 71990 82693 44377
2 11566 27301 1
2 23704 47061 1
1 67323 97867 14275 31136
1 11736 72566 78826 36301
3 70013 1 10000000000
1 23701 76122 6240 56626
2 71627 75885 1100
3 852 1 100000...

output:

0
6975596287
0
0
2144844585
6718561947
6718561947
2158130751
2917409114
3686398232
3317159253
1336852308
8373494196
2102154609
2709470190
1740124736
7659185913
1508488055
4242893725
8408091078
11875396012
18171183033
0
14595335642
18243076995
18521970659
18538979218
18538979218
20876408549
136521304...

result:

ok 33368 numbers

Test #20:

score: 24
Accepted
time: 250ms
memory: 30332kb

input:

99995 99996
3 45022 1 10000000000
2 3423 75909 1
1 54871 80611 9913 46243
2 12223 64484 1
1 12991 92385 39637 71608
3 20817 1 10000000000
3 14810 1 10000000000
3 85611 1 10000000000
3 34957 1 10000000000
3 22540 1 10000000000
2 11680 85376 4565
2 37283 97824 2191
3 84953 1 10000000000
3 56562 1 1000...

output:

0
2838326296
2838326296
2838326296
2838326296
2838326296
2354542648
2812903264
2631018944
2518569019
2681433168
2439582449
0
2681433168
2596475577
2439582449
0
7076261394
4449272647
15245942497
17667326760
15245942497
17667326760
17015058013
16860972874
42913399354
6034264601
96968820
12777724000
15...

result:

ok 33362 numbers

Test #21:

score: 24
Accepted
time: 284ms
memory: 31504kb

input:

99997 99996
3 68591 1 10000000000
2 11039 97222 1
1 34581 58556 66216 49214
1 42922 79247 32694 462
2 53032 58124 10301
3 34753 1 10000000000
1 22670 52566 70087 14019
3 55338 1 10000000000
3 30269 1 10000000000
1 4720 84384 20451 10356
3 11823 1 10000000000
1 37895 41892 96036 45498
2 19158 57043 7...

output:

0
3258754224
3269099790
982549653
211790556
1278106321
13591686831
9174283336
13929158983
10709860696
11476736634
24202776273
22066287959
23834159039
19695058244
28492871831
46736921586
859941225
5996946536
32463961710
31748786358
726580728
43724564767
39567498070
43724564767
57942980296
41944974287...

result:

ok 16689 numbers

Subtask #5:

score: 0
Skipped

Dependency #1:

0%