QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#592068#8229. 栈Azusa24 114ms30724kbC++144.0kb2024-09-26 20:28:372024-09-26 20:28:38

Judging History

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

  • [2024-09-26 20:28:38]
  • 评测
  • 测评结果:24
  • 用时:114ms
  • 内存:30724kb
  • [2024-09-26 20:28:37]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=(a);i<=(n);++i)
#define per(i,a,n) for(int i=(n);i>=(a);--i)
#define SZ(x) ((int)(x).size())

using namespace std;
typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

const int maxn=1e5+10;

inline void rd(){};
template<typename T1,typename ...T2>
inline void rd(T1 &x,T2 &...rest){
    bool w=1; x=0; char ch=getchar();
    while(!isdigit(ch)){w^=(ch=='-');ch=getchar();}
    while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    w?0:x=-x;
    rd(rest...);
}

template<typename T> 
inline void pr(T x,bool op=false){
    x<0?x=-x,putchar('-'):0;
    static short sta[25],top(0);
    do sta[top++]=x%10,x/=10; while(x);
    while(top) putchar(sta[--top]|48);
    op?putchar('\n'):putchar(' ');
} 

int n,m;
vector<array<ll,3>> event[maxn],q[maxn];
ll res[maxn];

namespace sgt{
	ll leftcnt[maxn<<2],leftsum[maxn<<2],sum[maxn<<2],cnt[maxn<<2],right[maxn<<2];

	inline pll up(int p,int l,int r,ll v){ //fi leftcnt se sum
		// printf("up=%d %d %d\n",p,l,r);
		if(cnt[p]<=v) return make_pair(0,0);
		if(l==r){
			return make_pair(cnt[p]-v,(cnt[p]-v)*(sum[p]/cnt[p]));
		}
		int mid=(l+r)>>1;
		if(v<=cnt[p<<1|1]){
			pll t=up(p<<1|1,mid+1,r,v);
			return make_pair(leftcnt[p]+t.first,leftsum[p]+t.second);
		}
		else return up(p<<1,l,mid,v-cnt[p<<1|1]+right[p<<1|1]);
	}

	inline void upd(int p,int l,int r,int x,ll c,ll v){
		// printf("upd=%d %d %d\n",p,l,r);
		if(l==r){
			if(!v) right[p]+=c;
			else cnt[p]+=c,sum[p]+=c*v;
			return;
		}
		int mid=(l+r)>>1;
		if(x<=mid) upd(p<<1,l,mid,x,c,v);
		else upd(p<<1|1,mid+1,r,x,c,v);
		pll t=up(p<<1,l,mid,right[p<<1|1]);
		leftcnt[p]=t.first; leftsum[p]=t.second;
		sum[p]=leftsum[p]+sum[p<<1|1];
		cnt[p]=leftcnt[p]+cnt[p<<1|1];
		right[p]=right[p<<1]+right[p<<1|1]-(cnt[p<<1]-leftcnt[p]);
		// printf("-->%d %lld %lld %lld %lld\n",p,leftcnt[p],sum[p],cnt[p],right[p]);
	}

	inline pll calc(int p,int l,int r,int ql,int qr,ll v){//when right=v,[ql,qr]->cnt and right
		if(ql<=l && r<=qr) return make_pair(max(cnt[p]-v,0ll),right[p]+max(v-cnt[p],0ll));
		int mid=(l+r)>>1;
		if(qr<=mid) return calc(p<<1,l,mid,ql,qr,v);
		if(ql>mid)  return calc(p<<1|1,mid+1,r,ql,qr,v);
		pll res=calc(p<<1|1,mid+1,r,ql,qr,v);
		pll t=calc(p<<1,l,mid,ql,qr,res.second);
		return make_pair(res.first+t.first,t.second);
	}	

	inline ll qry(int p,int l,int r,int x,ll c,ll v){//when right=v,[1,x]->前c个数的sum 
		// printf("qry=%d %d %d %lld %lld\n",p,l,r,c,v);
		if(!c) return 0;
		if(l==r){
			return min(c,max(cnt[p]-v,0ll))*(sum[p]/cnt[p]);
		}
		int mid=(l+r)>>1;
		if(x>=r){
			if(v>=cnt[p<<1|1]) return qry(p<<1,l,mid,x,c,v-cnt[p<<1|1]+right[p<<1|1]);
			else return leftcnt[p]>=c ? qry(p<<1,l,mid,x,c,right[p<<1|1]): leftsum[p]+qry(p<<1|1,mid+1,r,x,c-leftcnt[p],v);
		}
		if(x<=mid) return qry(p<<1,l,mid,x,c,v);
		else{
			pll t1=calc(p<<1|1,mid+1,r,1,x,v);
			pll t2=calc(p<<1,l,mid,1,x,t1.second);
			return qry(p<<1,l,mid,x,min(c,t2.first),t1.second)+qry(p<<1|1,mid+1,r,x,max(c-t2.first,0ll),v);
		}
	}
};
using namespace sgt;

inline void solve(){
	rd(n,m);
	rep(i,1,m){
		int opt,l,r;
		ll x,y;
		rd(opt); res[i]=-1;
		if(opt==1){
			rd(l,r,x,y);
			event[l].push_back({i,x,y});
			event[r+1].push_back({i,-x,y});
		}
		if(opt==2){
			rd(l,r,x);
			event[l].push_back({i,x,0});
			event[r+1].push_back({i,-x,0});
		}
		if(opt==3){
			rd(x,l,r);
			q[x].push_back({i,l,r});
		}
	}
	rep(i,1,n){
		for(auto [id,x,y]:event[i]){
			// printf("%d %lld %lld %lld %lld\n",i,opt,id,x,y);
			upd(1,1,m,id,x,y);
		}
		for(auto [id,x,y]:q[i]){
			pll t=calc(1,1,m,1,id,0);
			if(t.first<x){
				res[id]=0;
				continue;
			}
			res[id]=qry(1,1,m,id,min(y,t.first),0)-qry(1,1,m,id,x-1,0);
			// printf("?%lld %lld %lld %lld\n",id,x-1,min(y,t.first),res[id]);
		}
	}
	rep(i,1,m)
		if(~res[i]) 
			pr(res[i],1);
}

signed main(){
	// freopen("air.in","r",stdin);
	// freopen("air.out","w",stdout);
    int _=1;
    //scanf("%d",&_); 
    while(_--) solve();
}

詳細信息

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

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:


result:


Subtask #2:

score: 0
Runtime Error

Test #6:

score: 0
Runtime Error

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:


result:


Subtask #3:

score: 0
Runtime Error

Test #12:

score: 0
Runtime Error

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:


result:


Subtask #4:

score: 24
Accepted

Test #17:

score: 24
Accepted
time: 84ms
memory: 30060kb

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: 84ms
memory: 30076kb

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: 101ms
memory: 29184kb

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: 95ms
memory: 29024kb

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: 114ms
memory: 30724kb

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%