이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 = 65010;
int n, m, q, tot[mxN], del[mxN];
vector<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+(sz(shop[i])?shop[i].back()[1]:0)}),tot[i]+=v;
} 
void rem(int i, int v){
	if(tot[i]<=v) del[i]+=tot[i], tot[i]=0;
	else del[i]+=v, tot[i]-=v;
}
int get(int i, int v){
	v+=del[i]; if(!sz(shop[i]) or shop[i].back()[1]<v) return 0;
	int l = 0, r = sz(shop[i])-1;
	while(l<r){
		int mid = (l+r)/2;
		if(shop[i][mid][1]<v) l=mid+1;
		else r=mid;
	}
	return shop[i][l][0];
}
int32_t main()
{
	ios_base::sync_with_stdio(false); cin.tie(0);
	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 time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |