Submission #367810

#TimeUsernameProblemLanguageResultExecution timeMemory
367810vaavenFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
194 ms13164 KiB
#pragma GCC target("avx2") #pragma GCC optimize("O3") #include <iostream> #include <vector> #include <algorithm> #include <math.h> #include <set> #include <stack> #include <iomanip> #include <bitset> #include <map> #include <cassert> #include <array> #include <queue> #include <cstring> #include <random> #include <unordered_set> #include <unordered_map> #define pqueue priority_queue #define pb(x) push_back(x) #define endl '\n' #define all(x) x.begin(), x.end() #define int long long using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef vector<int> vi; typedef vector<vector<int> > vvi; // typedef tuple<ll, ll, ll> tiii; typedef pair<int, int> pii; typedef vector<pair<int, int> > vpii; typedef vector<bool> vb; typedef vector<string> vs; typedef vector<char> vc; const int inf = 1e9 + 228; const int infll = 1e18; const ll mod = 1e9 + 7; const ll mod2 = 998244353; const ld eps = 1e-14; void fast_io(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("inputik.txt", "r", stdin); // freopen("outputik.txt", "w", stdout); } const int maxn = 2e5 + 228; int t[maxn], a[maxn], n, q; void add(int i, int x){ for(; i<maxn; i+=i&-i) t[i] += x; } int get(int i){ int res = 0; for(; i>0; i-=i&-i) res += t[i]; return res; } int get(int a, int b, int s, int t){ if(a < b) return - s * (b-a); else return t * (a-b); } void solve(){ int s, t; cin >> n >> q >> s >> t; for(int i=0; i<=n; i++){ cin >> a[i]; } int ans = 0; for(int i=1; i<=n; i++){ ans += get(a[i-1], a[i], s, t); } for(int i=1; i<=q; i++){ int l, r, x; cin >> l >> r >> x; ans -= get(a[l-1] + get(l-1), a[l] + get(l), s, t); if(r != n) ans -= get(a[r] + get(r), a[r+1] + get(r+1), s, t); add(l, x); add(r+1, -x); ans += get(a[l-1] + get(l-1), a[l] + get(l), s, t); if(r != n) ans += get(a[r] + get(r), a[r+1] + get(r+1), s, t); cout << ans << endl; } } signed main(){ fast_io(); // ;(time(NULL)); cout << fixed << setprecision(10); int q = 1; // cin >> q; while(q--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...