Submission #129322

#TimeUsernameProblemLanguageResultExecution timeMemory
129322AuldLangSyneFoehn Phenomena (JOI17_foehn_phenomena)C++14
0 / 100
632 ms13824 KiB
#include <bits/stdc++.h>
#define ll long long
#define f(i, a, b) for(ll i = a; i <= b; ++i)
#define ff(i, a, b) for(ll i = a; i < b; ++i)
#define F(i, a, b) for(ll i = a; i >= b; --i)
#define FF(i, a, b) for(ll i = a; i > b; --i)
#define x first
#define y second
#define X real()
#define Y imag()
using namespace std;
typedef complex<ll> P;
typedef pair<ll, ll> ii;
typedef tuple<ll, ll, ll> iii;

const ll INF = 1e9+7;
const ll N = 2e5+7;
ll n, m, R, S, u, v, o, node[4*N], lazy[4*N], a[N];

void build(ll id, ll l, ll r){
	if(l == r){
		node[id] = (a[r] > a[r-1] ? S*(a[r-1] - a[r]) : R*(a[r-1] - a[r]));
		return;
	}
	ll mid = (l+r)/2;
	build(2*id, l, mid);
	build(2*id+1, mid+1, r);
	node[id] = node[2*id] + node[2*id+1];
}
void down(ll id){
	if(!lazy[id]) return;
	lazy[2*id] += lazy[id];
	lazy[2*id+1] += lazy[id];
	lazy[id] = 0;
}
void upd(ll id, ll l, ll r, ll u, ll v, ll val){
	if(v < l || r < u) return;
	if(u <= l && r <= v){
		lazy[id] += val;
		return;
	}
	int mid = (l+r)/2;
	down(id);
	upd(2*id, l, mid, u, v, val);
	upd(2*id+1, mid+1, r, u, v, val);
}

ll get_point(ll id, ll l, ll r, ll post){
	if(post < l || r < post) return INF;
	if(l == r){
		return a[r] + lazy[id];
	}
	ll mid = (l+r)/2;
	down(id);
	return min(get_point(2*id, l, mid, post), get_point(2*id+1, mid+1, r, post));
}

void upd_point(ll id, ll l, ll r, ll post){
	if(post < l || r < post) return;
	if(l == r){
		if(post > 1) u = get_point(1,1,n,post-1);
		else u = 0;
		node[id] = (a[r] + lazy[id] > u ? S*(u - a[r] - lazy[id]) : R*(u - a[r] - lazy[id]));
		return;
 	}
 	ll mid = (l+r)/2;
 	down(id);
 	upd_point(2*id, l, mid, post);
 	upd_point(2*id+1, mid+1, r, post);
 	node[id] = node[id*2] + node[id*2+1];
}
signed main(){
	scanf("%lld %lld %lld %lld", &n, &m, &S, &R);
	f(i,0,n){
		scanf("%lld", &a[i]);
	}
	build(1,1,n);
	while(m--){
		scanf("%lld %lld %lld", &u, &v, &o);
		upd(1,1,n,u,v,o);
		if(u > 0) upd_point(1,1,n,u);
		if(v < n) upd_point(1,1,n,v+1);
		printf("%lld\n", node[1]);
	}
}

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:73:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld %lld %lld", &n, &m, &S, &R);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:75:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", &a[i]);
   ~~~~~^~~~~~~~~~~~~~~
foehn_phenomena.cpp:79:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld %lld %lld", &u, &v, &o);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...