Submission #1265075

#TimeUsernameProblemLanguageResultExecution timeMemory
1265075CrabCNHExamination (JOI19_examination)C++20
2 / 100
137 ms20304 KiB
#include <bits/stdc++.h> #define task "BriantheCrab" #define int long long #define pii pair <int, int> #define fi first #define se second #define szf sizeof #define sz(s) (int)((s).size()) #define all(v) (v).begin(), (v).end() typedef long long ll; typedef unsigned long long ull; typedef long double ld; using namespace std; template <class T> void minimize (T &t, T f) {if (t > f) t = f;} template <class T> void maximize (T &t, T f) {if (t < f) t = f;} const int maxN = 1e5 + 5; const int inf = 1e18 + 7; const int mod = 1e9 + 7; // khong tu code thi khong kha len duoc dau // biet sol roi thi tu lam not di struct Point { int x, y, z; int id, t; }; bool cmp (Point A, Point B) { if (A.x != B.x) { return A.x > B.x; } return A.t < B.t; } struct Fenwick { int bit[maxN * 5]; void upd (int id, int val) { for (; id < maxN * 5; id += id & (-id)) { bit[id] += val; } } int get (int id) { int res = 0; for (; id; id -= id & (-id)) { res += bit[id]; } return res; } } T; int Z; int n, q; vector <Point> v; int res[maxN]; void cdq (int l, int r) { //cout << l << ' ' << r << '\n'; if (l == r) { return; } int m = (l + r) >> 1; cdq (l, m), cdq (m + 1, r); int lp = l, rp = m + 1; vector <Point> tmp; vector <int> reset; while (lp <= m && rp <= r) { if (v[lp].y >= v[rp].y) { if (v[lp].t == 0) { T.upd (v[lp].z, 1); reset.push_back (v[lp].z); } tmp.push_back (v[lp ++]); } else { if (v[rp].t == 1) { res[v[rp].id] += T.get (Z) - T.get (v[rp].z - 1); } tmp.push_back (v[rp ++]); } } while (lp <= m) { tmp.push_back (v[lp ++]); } while (rp <= r) { if (v[rp].t == 1) { res[v[rp].id] += T.get (Z) - T.get (v[rp].z - 1); } tmp.push_back (v[rp ++]); } for (int i = l; i <= r; i ++) { v[i] = tmp[i - l]; } for (auto it : reset) { T.upd (it, -1); } } Point a[maxN]; void solve () { cin >> n >> q; vector <int> zip; for (int i = 1; i <= n; i ++) { int x, y, z; cin >> x >> y; z = x + y; v.push_back ({x, y, z, i, 0}); zip.push_back (z); } for (int i = n + 1; i <= n + q; i ++) { int x, y, z; cin >> x >> y >> z; v.push_back ({x, y, z, i, 1}); zip.push_back (z); } sort (all (zip)); zip.erase (unique (all (zip)), zip.end ()); Z = sz (zip) + 1; for (int i = 0; i < n + q; i ++) { v[i].z = lower_bound (all (zip), v[i].z) - zip.begin () + 1; } sort (all (v), cmp); cdq (0, n + q - 1); for (int i = n + 1; i <= n + q; i ++) { cout << res[i] << '\n'; } return; } signed main () { cin.tie (nullptr) -> sync_with_stdio (false); if (fopen (task".inp", "r")) { freopen (task".inp", "r", stdin); freopen (task".out", "w", stdout); } int t = 1; //cin >> t; while (t --) { solve (); } return 0; } // thfv

Compilation message (stderr)

examination.cpp: In function 'int main()':
examination.cpp:141:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  141 |         freopen (task".inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
examination.cpp:142:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  142 |         freopen (task".out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...