Submission #1296921

#TimeUsernameProblemLanguageResultExecution timeMemory
1296921nguyhoangphuWeighting stones (IZhO11_stones)C++20
100 / 100
37 ms9324 KiB
#include<bits/stdc++.h> using namespace std; #define file "a" #define int long long #define ll long long #define pii pair<int, int> #define pli pair<ll, int> #define fi first #define se second #define sz(a) (int)a.size() #define pb push_back #define mask(i) (1 << i) const int N = 1e5, inf = 1e9; void MAX(int &a, int b) { a = max(a, b); } void MIN(int &a, int b) { a = min(a, b); } struct stt { int i, w, tp; bool operator < (const stt &o) const { return i < o.i; } }; int n; int mx[4 * N + 2], mn[4 * N + 2], lz[4 * N + 2]; vector<stt> a; void down(int id) { if (lz[id] != 0) { mx[id * 2] += lz[id]; mx[id * 2 + 1] += lz[id]; mn[id * 2] += lz[id]; mn[id * 2 + 1] += lz[id]; lz[id * 2] += lz[id]; lz[id * 2 + 1] += lz[id]; lz[id] = 0; } } void update(int l, int r, int id, int u, int v, int x) { if (r < u || v < l) return; if (u <= l && r <= v) { mx[id] += x; mn[id] += x; lz[id] += x; return; } int m = (l + r) / 2; down(id); update(l, m, id * 2, u, v, x); update(m + 1, r, id * 2 + 1, u, v, x); mx[id] = max(mx[id * 2], mx[id * 2 + 1]); mn[id] = min(mn[id * 2], mn[id * 2 + 1]); } int getmax(int l, int r, int id, int u, int v) { if (r < u || v < l) return 0; if (u <= l && r <= v) return mx[id]; int m = (l + r) / 2; down(id); return max(getmax(l, m, id * 2, u, v), getmax(m + 1, r, id * 2 + 1, u, v)); } int getmin(int l, int r, int id, int u, int v) { if (r < u || v < l) return 0; if (u <= l && r <= v) return mn[id]; int m = (l + r) / 2; down(id); return min(getmin(l, m, id * 2, u, v), getmin(m + 1, r, id * 2 + 1, u, v)); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen(file".inp", "r")) { freopen(file".inp", "r", stdin); freopen(file".out", "w", stdout); } cin >> n; for (int i = 1; i <= n; i++) { int p, tp; cin >> p >> tp; a.pb({i, p, tp}); } // sort(a.begin(), a.end()); int val = 0, wmax = 0; for (stt x : a) { if (x.w > val) val = x.w, wmax = x.tp; if (x.tp == 1) update(1, n, 1, 1, x.w, 1); else update(1, n, 1, 1, x.w, -1); int kt = wmax; if (kt == 1) { if (mn[1] < 0) kt = 0; } else { if (mx[1] > 0) kt = 0; } if (kt == 1) cout << '>'; else if (kt == 2) cout << '<'; else cout << '?'; cout << "\n"; } }

Compilation message (stderr)

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