QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#403756#8229. 栈flying#0 194ms32732kbC++142.9kb2024-05-02 18:30:492024-05-02 18:30:51

Judging History

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

  • [2024-05-02 18:30:51]
  • 评测
  • 测评结果:0
  • 用时:194ms
  • 内存:32732kb
  • [2024-05-02 18:30:49]
  • 提交

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()
{
//	freopen("1.in","r",stdin);
	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,1,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: 2ms
memory: 12812kb

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
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
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
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
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
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
...

result:

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

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 154ms
memory: 32732kb

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
0
0
0
0
2457516294
0
0
0
2457516294
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2457516294
0
2457516294
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2457516294
2457516294
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
2457516294
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
2457516294
0
0
0
0...

result:

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

Subtask #3:

score: 0
Wrong Answer

Test #12:

score: 0
Wrong Answer
time: 181ms
memory: 31756kb

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
0
0
0
16065
16065
16065
0
16065
0
0
0
16065
16065
16065
0
0
0
0
0
0
0
0
0
0
0
16065
16065
0
16065
16065
0
16065
0
16065
0
0
16065
0
0
0
16065
0
0
16065
0
0
0
0
0
0
0
16065
16065
0
16065
0
0
0
0
0
16065
0
0
16065
0
0
0
0
16065
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
16065
0
0
0
16065
0
0
0
0
0
0
...

result:

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

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 194ms
memory: 31904kb

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
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
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
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
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
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
...

result:

wrong answer 2nd numbers differ - expected: '34602584', found: '0'

Subtask #5:

score: 0
Skipped

Dependency #1:

0%