QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#403758#8229. 栈flying#0 225ms32768kbC++142.9kb2024-05-02 18:32:252024-05-02 18:32:25

Judging History

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

  • [2024-05-02 18:32:25]
  • 评测
  • 测评结果:0
  • 用时:225ms
  • 内存:32768kb
  • [2024-05-02 18:32:25]
  • 提交

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<=val)
		return res[rt].ans-res[rt*2+1].ans+calcans(rt*2+1,val);
	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=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;
		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,n);
	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;
}

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 8ms
memory: 12588kb

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
0
328410220
3868951467
354681012
354681012
354681012
3454899900
354681012
0
0
0
3868951467
930356502
4825972171
2410632174
7823957630
0
7605940517
7220289528
1081562490
4502141070
1081562490
7725540960
0
0
0
7756309360
4419968046
4140997877
0
2307175899
2307175899
0
0
0
0
2190767040
219...

result:

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

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 191ms
memory: 32768kb

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: 218ms
memory: 31772kb

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
47078
0
0
98785
0
0
84295
1818
10359
88505
88505
0
124369
0
0
84295
0
0
0
41669
0
253056
167044
57781
204714
67036
41845
291861
108881
757810
108881
76791
177430
0
177430
230269
0
0
88269
0
0
51149
51149
0
0
0
71588
0
0
0
0
4378
159
0
0
0
0
0
40449
0
74358
40449
204786
153148
0
46069
...

result:

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

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 225ms
memory: 31796kb

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
23315121015
0
0
1902514434
1902514434
142201548
1902514434
15794375094
0
4192446657
14270425784
132317919
0
1385452703
1385452703
209520954
173054178
209520954
0
6843261316
38004579
0
38004579
7942101753
6144703384
6542442770
8463978444
4496343819
11161804173
0
10890418194
479258961
8...

result:

wrong answer 5th numbers differ - expected: '27739639583', found: '23315121015'

Subtask #5:

score: 0
Skipped

Dependency #1:

0%