Submission #167962

#TimeUsernameProblemLanguageResultExecution timeMemory
167962RakhmandSimple game (IZhO17_game)C++14
0 / 100
16 ms14840 KiB
// // ROIGold.cpp // Main calisma // // Created by Rakhman on 05/02/2019. // Copyright © 2019 Rakhman. All rights reserved. // #include <cstring> #include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <queue> #include <cmath> #include <cstdlib> #include <ctime> #include <cassert> #include <iterator> #define ios ios_base::sync_with_stdio(0), cout.tie(0), cin.tie(0); #define S second #define F first #define pb push_back #define nl '\n' #define NL cout << '\n'; #define EX exit(0) #define all(s) s.begin(), s.end() #define no_answer return cout << 0, 0; #define FOR(i, start, finish, k) for(int i = start; i <= finish; i += k) const int MXN = 1e6 + 200; const long long MNN = 4e2 + 200; const long long MOD = 1e9 + 7; const long long INF = 1e18; const int OO = 1e9 + 500; typedef long long llong; typedef unsigned long long ullong; using namespace std; int n, m, h[MXN], t[MXN * 4], mod[MXN * 4]; void push(int v){ if(mod[v] != 0){ mod[v + v] = mod[v + v + 1] = mod[v]; t[v + v] += mod[v]; t[v + v + 1] += mod[v]; mod[v] = 0; } } void upd(int v, int tl, int tr, int L, int R, int x){ if(L <= tl && tr <= R){ t[v] += x; mod[v] += x; return ; } if(tl > R || tr < L || L > R){ return ; } push(v); int tm = (tl + tr) / 2; upd(v + v, tl, tm, L, R, x); upd(v + v + 1, tm + 1, tr, L, R, x); } llong get(int v, int tl, int tr, int L, int R){ if(L <= tl && tr <= R){ return t[v]; } if(tl > R || tr < L || L > R){ return 0; } push(v); int tm = (tl + tr) / 2; return get(v + v, tl, tm, L, R) + get(v + v + 1, tm + 1, tr, L, R); } void del(int i){ if(i > 1) { if(h[i] > h[i - 1]){ upd(1, 1, 1000000, h[i - 1] + 1, h[i] - 1, -1); }else if(h[i - 1] > h[i]){ upd(1, 1, 1000000, h[i] + 1, h[i - 1] - 1, -1); } } if(i + 1 <= n){ if(h[i] > h[i + 1]){ upd(1, 1, 1000000, h[i + 1] + 1, h[i] - 1, -1); }else if(h[i + 1] > h[i]){ upd(1, 1, 1000000, h[i] + 1, h[i + 1] - 1, -1); } } } void add(int i){ if(i > 1) { if(h[i - 1] > h[i]){ upd(1, 1, 1000000, h[i] + 1, h[i - 1] - 1, 1); }else if(h[i - 1] < h[i]){ upd(1, 1, 1000000, h[i - 1] + 1, h[i] - 1, 1); } } if(i + 1 <= n){ if(h[i] > h[i + 1]){ upd(1, 1, 1000000, h[i + 1] + 1, h[i] - 1, 1); }else if(h[i + 1] > h[i]){ upd(1, 1, 1000000, h[i] + 1, h[i + 1] - 1, 1); } } } int main () { ios; cin >> n >> m; for(int i = 1; i <= n; i++){ cin >> h[i]; if(i > 1) { if(h[i - 1] > h[i]){ upd(1, 1, 1000000, h[i] + 1, h[i - 1] - 1, 1); }else if(h[i - 1] < h[i]){ upd(1, 1, 1000000, h[i - 1] + 1, h[i] - 1, 1); } } } for(int i = 1; i <= m; i++){ int pos, val, type, H; cin >> type; if(type == 1){ cin >> pos >> val; del(pos); h[pos] = val; add(pos); }else{ cin >> H; cout << get(1, 1, 1000000, H, H) << nl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...