Submission #783260

#TimeUsernameProblemLanguageResultExecution timeMemory
783260Dan4LifeFood Court (JOI21_foodcourt)C++17
7 / 100
1056 ms524288 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define int long long
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
const int mxN = 70000;
int n, m, q, tot[mxN];
deque<array<int,2>> shop[mxN];

void add(int i, int x, int v){
	if(sz(shop[i]) and shop[i].back()[0]==x)
		shop[i].back()[1]+=v,tot[i]+=v;
	else shop[i].pb({x,v}),tot[i]+=v;
} 

void rem(int i, int v){
	while(v and sz(shop[i])){
		if(shop[i][0][1]<=v) v-=shop[i][0][1],tot[i]-=shop[i][0][1], shop[i].pop_front();
		else shop[i][0][1]-=v, tot[i]-=v, v=0;
	}
}

int get(int i, int v){
	if(tot[i]<v) return 0; 
	int xd = 0;
	for(int j = 0; j < sz(shop[i]); j++){
		xd+=shop[i][j][1];
		if(xd>=v) return shop[i][j][0];
	}
	return 0;
}

int32_t main()
{
	cin >> n >> m >> q;
	while(q--){
		int t, l, r, x, v;
		cin >> t;
		if(t==1){
			cin >> l >> r >> x >> v;
			for(int i = l; i <= r; i++) add(i,x,v);
		}
		else if(t==2){
			cin >> l >> r >> v;
			for(int i = l; i <= r; i++) rem(i,v);
		}
		else cin >> x >> v, cout << get(x,v) << "\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...