제출 #1292996

#제출 시각아이디문제언어결과실행 시간메모리
1292996ghammazhassanFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
87 ms8912 KiB
// #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <unordered_map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> using namespace std; #define int long long #define endl "\n" #define fi first #define se second const int M=1e9+7; const int inf = 1e14; const int LOG=18; const int N=2e5+5; int n , m , c , w , k , t=1 , q=1 , x , y , z , l , r; int fn1[N]; void up1(int i,int x){ if (i<N){ fn1[i]+=x; up1(i+(i&-i),x); } } int pr1(int i){ if (i==0)return 0; return fn1[i]+pr1(i-(i&-i)); } int fn2[N]; void up2(int i,int x){ if (i<N){ fn2[i]+=x; up2(i+(i&-i),x); } } int pr2(int i){ if (i==0)return 0; return fn2[i]+pr2(i-(i&-i)); } void solve(){ int s,t; cin >> n >> q >> s >> t; vector<int>a(n+1); for (int i=0;i<=n;i++){ cin >> a[i]; } for (int i=1;i<=n;i++){ int u=a[i]-a[i-1]; if (u>0){ up1(i,u); } else{ up2(i,-u); } } for (int o=0;o<q;o++){ cin >> l >> r >> x; y=x; if (x>0){ int u1=pr2(l)-pr2(l-1); int u2=min(u1,x); up2(l,-u2); x-=u2; if (x){ up1(l,x); } } else{ x=-x; int u1=pr1(l)-pr1(l-1); int u2=min(u1,x); up1(l,-u2); x-=u2; if (x){ up2(l,x); } } x=y; if (r==n){ cout << -pr1(n)*s+pr2(n)*t << endl; continue; } x=-x; r++; if (x>0){ int u1=pr2(r)-pr2(r-1); int u2=min(u1,x); up2(r,-u2); x-=u2; if (x){ up1(r,x); } } else{ x=-x; int u1=pr1(r)-pr1(r-1); int u2=min(u1,x); up1(r,- u2); x-=u2; if (x){ up2(r,x); } } cout << -pr1(n)*s+pr2(n)*t << endl; } } signed main() { ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE cout << fixed << setprecision(9); srand(time(0)); // int t=1; // cin >> t; for (int _=1;_<=t;_++){ solve(); q++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...