# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1146257 | antonn | 푸드 코트 (JOI21_foodcourt) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
using ll = long long;
using pi = pair<int, int>;
using vi = vector<int>;
template<class T> bool ckmin(T& a, T b) { return b < a ? a = b, true : false; }
template<class T> bool ckmax(T& a, T b) { return a < b ? a = b, true : false; }
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n, m, q; cin >> n >> m >> q;
vector<vector<ll>> a(q+1, vector<ll>(n+1));
vector<vector<ll>> join(q+1, vector<ll>(n+1));
vector<vector<ll>> leave(q+1, vector<ll>(n+1));
vector<int> types(q+1);
for (int iq = 1; iq <= q; ++iq) {
int t; cin >> t;
for (int i = 1; i <= n; ++i) a[iq][i] = a[iq - 1][i];
if (t == 1) {
ll l, r, c, k; cin >> l >> r >> c >> k;
for (int i = l; i <= r; ++i) a[iq][i] += k;
for (int i = l; i <= r; ++i) join[iq][i] += k;
types[iq] = c;
} else if (t == 2) {
ll l, r, k; cin >> l >> r >> k;
for (int i = l; i <= r; ++i) a[iq][i] -= k;
for (int i = l; i <= r; ++i) a[iq][i] = max(a[iq][i], 0);
for (int i = l; i <= r; ++i) leave[iq][i] = k;
} else {
ll p, x; cin >> p >> x;
if (a[iq][p] < x) {
cout << 0 << "\n";
continue;
}
int day = 0;
for (int i = 1; i < iq; ++i) {
if (a[i][p] == 0) {
day = i;
}
}
ll a = 0, b = 0;
for (int i = day + 1; i <= iq; ++i) {
a += leave[i][p];
}
ll ans = 0;
for (int i = day + 1; i <= iq; ++i) {
b += join[i][p];
if (b >= a + x) {
ans = types[i];
break;
}
}
cout << ans << "\n";
}
}
}