Submission #702740

#TimeUsernameProblemLanguageResultExecution timeMemory
702740LittleCubeSweeping (JOI20_sweeping)C++17
1 / 100
18197 ms2097152 KiB
#include <bits/stdc++.h> #define pii pair<int, int> #define F first #define S second using namespace std; int N, M, Q, ddx; pii pos[1500005]; vector<vector<int>> v = {{}}; vector<int> l = {0}, r = {0}; int sdx = 0; int node() { v.emplace_back(vector<int>{}); l.emplace_back(0); r.emplace_back(0); ++sdx; return sdx; } void modify(int mL, int mR, int val, int i = 0, int L = 1, int R = N) { if (mL <= L && R <= mR) v[i].emplace_back(val); else if (R < mL || mR < L) return; else { int mid = (L + R) / 2; if (!l[i]) l[i] = node(); modify(mL, mR, val, l[i], L, mid); if (!r[i]) r[i] = node(); modify(mL, mR, val, r[i], mid + 1, R); } } void insert(int i) { if (pos[i].F + pos[i].S == N) return; modify(pos[i].F + 1, N - pos[i].S, i); } vector<int> collect; void query(int val, int i = 0, int L = 1, int R = N) { for (auto j : v[i]) collect.emplace_back(j); v[i].clear(); if (L != R) { int mid = (L + R) / 2; if (val <= mid && l[i]) query(val, l[i], L, mid); if (val > mid && r[i]) query(val, r[i], mid + 1, R); } } void push(int L, bool isH) { query((isH ? N - L : L + 1)); for (auto i : collect) if (isH && pos[i].F < N - L && pos[i].S <= L) { pos[i].F = N - L; insert(i); } else if (!isH && pos[i].F <= L && pos[i].S < N - L) { pos[i].S = N - L; insert(i); } collect.clear(); } signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> N >> M >> Q; for (int i = 1; i <= M; i++) { ddx++; cin >> pos[ddx].F >> pos[ddx].S; insert(ddx); } for (int i = 1; i <= Q; i++) { int T, L, P, X, Y; cin >> T; if (T == 1) { cin >> P; cout << pos[P].F << ' ' << pos[P].S << '\n'; } else if (T == 2) { cin >> L; push(L, 1); } else if (T == 3) { cin >> L; push(L, 0); } else { cin >> X >> Y; ddx++; pos[ddx] = pii(X, Y); insert(ddx); } } }
#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...