Submission #875351

#TimeUsernameProblemLanguageResultExecution timeMemory
875351atomExamination (JOI19_examination)C++17
100 / 100
636 ms45216 KiB
#include "bits/stdc++.h" // @JASPER'S BOILERPLATE using namespace std; using ll = long long; #define fi first #define se second #ifdef JASPER #include "debug.h" #else #define debug(...) 166 #endif #define int long long using pii = pair < int, int >; const int INF = 2e9; const int MOD = 1e9 + 7; const int N = 2e5 + 5; struct Fenwick { int n; vector <int> f; void init (int _n) { n = _n; f.resize(_n + 1); } int get(int x) { int ans = 0; for (; x >= 1; x -= x & -x) ans += f[x]; return ans; } void upd(int x, int val) { for (; x <= n; x += x & -x) f[x] += val; } int qry(int l) { return get(n) - get(l - 1); } } fen; int n, q; int ans[N]; vector <vector <int>> queries; void dnc(int l, int r) { if (l == r) return; int m = (l + r) / 2; dnc(l, m); dnc(m + 1, r); vector <vector <int>> qs; // Solving queries in the left for (int i = l; i <= m; ++i) { auto x = queries[i]; if (x[3] == -1) qs.push_back({x[1], x[2], -1}); } // Al < Am < Ar -> only take student in right to update for (int i = m + 1; i <= r; ++i) { auto x = queries[i]; if (x[3] != -1) qs.push_back({x[1], x[2], x[3]}); } sort(qs.begin(), qs.end()); // Sort by Informatics points for (auto& x : qs) { if (x[2] == -1) fen.upd(x[1], 1); else ans[x[2]] += fen.get(x[1]); } // Undoing changes for (auto& x : qs) { if (x[2] == -1) fen.upd(x[1], -1); } } void run_case() { cin >> n >> q; vector <int> val; int Q = n + q; for (int i = 1; i <= n; ++i) { int s, t; cin >> s >> t; queries.push_back({s, t, s + t, -1}); val.push_back(s); val.push_back(t); val.push_back(s + t); } for (int i = 1; i <= q; ++i) { int x, y, z; cin >> x >> y >> z; queries.push_back({x, y, z, i}); val.push_back(x); val.push_back(y); val.push_back(z); } for (int& x : val) x = -x; sort(val.begin(), val.end()); val.resize(unique(val.begin(), val.end()) - val.begin()); int sz = val.size(); fen.init(N * 4 + 1); for (auto& x : queries) { for (int i = 0; i < (int) x.size() - 1; ++i) { x[i] = lower_bound(val.begin(), val.end(), -x[i]) - val.begin() + 1; // cout << x[i] << "\n"; } } // // sort by Maths points sort(queries.begin(), queries.end()); dnc(0, Q - 1); for (int i = 1; i <= q; ++i) cout << ans[i] << "\n"; } signed main() { cin.tie(0) -> sync_with_stdio(0); int Test = 1; //cin >> Test; for (int test = 1; test <= Test; test++){ run_case(); } }

Compilation message (stderr)

examination.cpp: In function 'void run_case()':
examination.cpp:112:9: warning: unused variable 'sz' [-Wunused-variable]
  112 |     int sz = val.size();
      |         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...