Submission #1299644

#TimeUsernameProblemLanguageResultExecution timeMemory
1299644nmhungSushi (JOI16_sushi)C++20
100 / 100
1540 ms65616 KiB
#include <bits/stdc++.h> using namespace std; #define TIME (1.0 * clock() / CLOCKS_PER_SEC) #define rf if(fopen(name".inp", "r")) {freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout);} #define bit(i, mask) (((mask) >> (i)) & 1) #define ll long long #define fi first #define se second #define pii pair<int, int> #define vi vector<int> #define all(a) (a).begin(), (a).end() #define len(x) ((int)(x).size()) #define pb push_back #define endl '\n' #define name "" template<typename T1, typename T2> bool mini(T1 &a, T2 b) {if(a > b) a = b; else return 0; return 1;} template<typename T1, typename T2> bool maxi(T1 &a, T2 b) {if(a < b) a = b; else return 0; return 1;} const int mod = 1e9 + 7; const int inf = 1e9 + 9; const ll oo = 1e18l + 7; const int M = 5e5 + 6; const int N = 4e5 + 6; const int LOG = 31 - __builtin_clz(N); const int S = 632; int n, q, a[N]; struct Block{ int st, en; priority_queue<int> pq; int m, vec[25005]; void build(){ if(m == 0) return; priority_queue<int, vi, greater<int>> _pq(vec + 1, vec + m + 1); for(int i = st; i <= en; i++){ int val = _pq.top(); if(a[i] > val){ _pq.pop(); _pq.push(a[i]); a[i] = val; } } m = 0; } int modify(int l, int r, int x){ build(); for(int i = l; i <= r; i++) if(a[i] > x) swap(a[i], x); pq = priority_queue<int>(a + st, a + en + 1); return x; } int update(int x){ vec[++m] = x; int val = pq.top(); if(x < val){ pq.pop(); pq.push(x); x = val; } return x; } } B[N / S + 2]; void inp(){ cin >> n >> q; for(int i = 1; i <= n; i++) cin >> a[i]; } #define idBlock(i) ((i - 1) / S + 1) #define posBlock(i) ((i - 1) * S + 1) int calc(int l, int r, int x){ int blockL = idBlock(l), blockR = idBlock(r); if(blockL == blockR) return B[blockL].modify(l, r, x); int enL = blockL * S, stR = posBlock(blockR); x = B[blockL].modify(l, enL, x); for(int i = blockL + 1; i < blockR; i++) x = B[i].update(x); x = B[blockR].modify(stR, r, x); return x; } void proc(){ for(int i = 1; i <= (n - 1) / S + 1; i++){ int l = (i - 1) * S + 1, r = min(n, i * S); B[i].st = l, B[i].en = r; B[i].pq = priority_queue<int>(a + l, a + r + 1); } while(q--){ int l, r, x; cin >> l >> r >> x; if(l <= r) cout << calc(l, r, x) << endl; else cout << calc(1, r, calc(l, n, x)) << endl; } } int main(){ cin.tie(nullptr)->sync_with_stdio(false); rf int test = 1; //cin >> test; while(test--){ inp(); proc(); } cerr << "Time elapsed: " << TIME << "s" << endl; return 0; }

Compilation message (stderr)

sushi.cpp: In function 'int main()':
sushi.cpp:6:47: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define rf if(fopen(name".inp", "r")) {freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout);}
      |                                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sushi.cpp:106:5: note: in expansion of macro 'rf'
  106 |     rf
      |     ^~
sushi.cpp:6:80: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define rf if(fopen(name".inp", "r")) {freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout);}
      |                                                                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sushi.cpp:106:5: note: in expansion of macro 'rf'
  106 |     rf
      |     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...