Submission #687348

#TimeUsernameProblemLanguageResultExecution timeMemory
687348pragmatistSimple game (IZhO17_game)C++17
100 / 100
164 ms11140 KiB
/* #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("O3") #pragma GCC target ("avx2") #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmn,avx,tune=native") #pragma GCC optimize("unroll-loops") */ #pragma GCC target("avx2", "bmi", "bmi2", "lzcnt", "popcnt") #include<bits/stdc++.h> #define sz(v) (int)v.size() #define ll long long #define pb push_back #define x first #define y second #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define nl "\n" using namespace std; using pii = pair<int, int>; const int N = (int)1e6 + 7; // make sure this is right const int inf = (int)1e9; const ll INF = (ll)3e18 + 7; const ll MOD = (ll)1e9 + 7; // make sure this is right pii dir[] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; int sum(int x, int y) { x += y; if(x >= MOD) x -= MOD; return x; } int mult(int x, int y) { return 1ll * x * y % MOD; } int n, q, a[N], lim; int t[4 * N]; void upd(int v, int tl, int tr, int l, int r, int x) { if(tl >= l && tr <= r) { t[v] += x; return; } if(tl > r || l > tr) return; int mid = (tl + tr) >> 1; upd(v * 2, tl, mid, l, r, x); upd(v * 2 + 1, mid + 1, tr, l, r, x); } int get(int v, int tl, int tr, int id) { if(tl == tr) { return t[v]; } int mid = (tl + tr) >> 1; if(id <= mid) return t[v] + get(v * 2, tl, mid, id); else return t[v] + get(v * 2 + 1, mid + 1, tr, id); } void solve() { cin >> n >> q; for(int i = 1; i <= n; ++i) cin >> a[i]; lim = 1e6; for(int i = 2; i <= n; ++i) { int l = min(a[i - 1], a[i]), r = max(a[i - 1], a[i]); upd(1, 1, lim, l, r, 1); } while(q--) { char tp; cin >> tp; if(tp == '1') { int id, val; cin >> id >> val; for(auto x : {-1, 1}) { int j = id + x; if(j >= 1 && j <= n) { int l = min(a[j], a[id]), r = max(a[j], a[id]); upd(1, 1, lim, l, r, -1); } } a[id] = val; for(auto x : {-1, 1}) { int j = id + x; if(j >= 1 && j <= n) { int l = min(a[j], a[id]), r = max(a[j], a[id]); upd(1, 1, lim, l, r, 1); } } } else { int h; cin >> h; cout << get(1, 1, lim, h) << "\n"; } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int test = 1; //cin >> test; for(int i = 1; i <= test; ++i) { //cout << "Case #" << i << ": "; solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...