제출 #797298

#제출 시각아이디문제언어결과실행 시간메모리
797298vjudge1푸드 코트 (JOI21_foodcourt)C++17
0 / 100
13 ms12864 KiB
#ifdef Home #define _GLIBCXX_DEBUG #endif // Home #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef deque < pair < ll, int > > QQ; QQ ShopsL[4444], ShopsR[4444]; void del(int i, int K) { if(ShopsL[i].empty() || ShopsL[i].back().first < K) { if(!ShopsL[i].empty()) { K -= ShopsL[i].back().first; } for(; !ShopsL[i].empty(); ShopsL[i].pop_back()); for(int cnt; !ShopsR[i].empty();) { cnt = ShopsR[i].back().first - (ShopsR[i].size() == 1 ? 0ll : ShopsR[i][ShopsR[i].size() - 2].first); ShopsL[i].push_back({(ShopsL[i].empty() ? 0ll : ShopsL[i].back().first) + cnt, ShopsR[i].back().second}); ShopsR[i].pop_back(); } } for(int cnt; K && !ShopsL[i].empty();) { cnt = ShopsL[i].back().first - (ShopsL[i].size() == 1 ? 0ll : ShopsL[i][ShopsL[i].size() - 2].first); if(K < cnt) { ShopsL[i].back().first -= K; K = 0; } else { K -= cnt; ShopsL[i].pop_back(); } } } void add(int i, ll K, int C) { if(!C) { del(i, K); return; } ShopsR[i].push_back({K + (ShopsR[i].empty() ? 0ll : ShopsR[i].back().first), C}); } int Get(int i, ll K) { if((ShopsL[i].empty() ? 0ll : ShopsL[i].back().first) + (ShopsR[i].empty() ? 0ll : ShopsR[i].back().first) < K) { return 0; } if(ShopsL[i].empty() || ShopsL[i].back().first < K) { if(!ShopsL[i].empty()) { K -= ShopsL[i].back().first; } int l = -1, r = ShopsR[i].size() - 1, m; for(; l + 1 < r;) { m = (l + r) / 2; (ShopsR[i][m].first < K ? l : r) = m; } return ShopsR[i].empty() ? 0ll : ShopsR[i][r].second; } int l = 0, r = ShopsL[i].size(), m; for(; l + 1 < r;) { m = (l + r) / 2; (ShopsL[i][m].first < K ? r : l) = m; } return ShopsL[i].empty() ? 0ll : ShopsL[i][l].second; } struct node{ node *left = NULL, *right = NULL; int l, r; queue < pair < ll, int > > q; node(int l, int r) :l(l),r(r){}; }; void relax(node *x, int i) { for(; !x->q.empty(); x->q.pop()) { add(i, x->q.front().first, x->q.front().second); } } void Push(pair < int, int > tmp, node *x) { if(x->q.empty() || x->q.back().second != tmp.second) { x->q.push(tmp); return; } x->q.back().first += tmp.first; } void push(node *x) { if(x->left == NULL) { x->left = new node(x->l, (x->r + x->l) / 2); } if(x->right == NULL) { x->right = new node((x->l + x->r) / 2, x->r); } for(; !x->q.empty(); x->q.pop()) { Push(x->q.front(), x->left); Push(x->q.front(), x->right); } } void add_to_que(int l, int r, pair < int, int > tmp, node *x) { if(r <= x->l || x->r <= l) { return; } if(l <= x->l && x->r <= r) { Push(tmp, x); return; } push(x); add_to_que(l, r, tmp, x->left); add_to_que(l, r, tmp, x->right); } int get(int pos, ll K, node *x) { if(x->l + 1 == x->r) { relax(x, x->l); return Get(x->l, K); } push(x); return pos < x->left->r ? get(pos, K, x->left) : get(pos, K, x->right) ; } main() { #ifdef Home freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif // Home ios_base::sync_with_stdio(0); cin.tie(0); int n, m, q, k = 1; pair < int, int > tmp; ll T; for(cin >> n >> m >> q; k <= n; k <<= 1); node *tree = new node(0, k); for(int t, L, R, C, K; q --> 0;) { cin >> t; if(t == 1) { cin >> L >> R >> C >> K; tmp = {K, C}; ++ R; add_to_que(L, R, tmp, tree); } else if(t == 2) { cin >> L >> R >> K; ++ R; tmp = {K, 0}; add_to_que(L, R, tmp, tree); } else { cin >> C >> T; cout << get(C, T, tree) << '\n'; } } }

컴파일 시 표준 에러 (stderr) 메시지

foodcourt.cpp:128:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  128 | main() {
      | ^~~~
#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...