답안 #923026

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
923026 2024-02-06T12:51:55 Z Gromp15 Foehn Phenomena (JOI17_foehn_phenomena) C++17
100 / 100
733 ms 25164 KB
#include <bits/stdc++.h>
#define ll long long
#define ar array
#define db double
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rint(l, r) uniform_int_distribution<int>(l, r)(rng)
template<typename T> bool ckmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }
template<typename T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }
struct seg {
	int n, N, S, T;
	vector<int> size;
	vector<ll> tree, lazy, tree2;
	ll cost(ll x, ll y) {
		return (ll)(x-y) * (x < y ? S : T);
	}
	seg(int s, int t, vector<int> &a) : n(sz(a)-1), N(1<<(__lg(n+1)+1)), S(s), T(t), size(2*N), tree(2*N), lazy(2*N), tree2(2*N) {
		for (int i = 0; i <= n; i++) {
			tree[i+N] = a[i], size[i+N] = 1;
			if (i) tree2[i+N] = cost(a[i-1], a[i]);
		}
		for (int i = N-1; i >= 1; i--) {
			tree[i] = tree[i*2] + tree[i*2+1];
			tree2[i] = tree2[i*2] + tree2[i*2+1];
			size[i] = size[i*2] + size[i*2+1];
		}
	}
	void push(int node) {
		if (lazy[node]) {
			tree[node] += lazy[node] * size[node];
			if (node < N) {
				lazy[node*2] += lazy[node];
				lazy[node*2+1] += lazy[node];
			}
			lazy[node] = 0;
		}
	}
	void update(int node, int nl, int nr, int ql, int qr, int v) {
		push(node);
		if (ql > nr || qr < nl) return;
		if (ql <= nl && nr <= qr) {
			lazy[node] += v;
			push(node);
			return;
		}
		int mid = (nl+nr)/2;
		update(node*2, nl, mid, ql, qr, v);
		update(node*2+1, mid+1, nr, ql, qr, v);
		tree[node] = tree[node*2] + tree[node*2+1];
	}
	void update2(int pos) {
		auto upd = [&](int i) {
			vector<int> ok;
			for (int j = i+N; j; j >>= 1) {
				ok.emplace_back(j);
			}
			for (int k = sz(ok)-1; k >= 0; k--) {
				int j = ok[k];
				push(j);
			}
		};
		for (int i = pos; i <= pos+1; i++) {
			if (i-1 >= 0 && i <= n) {
				upd(i-1), upd(i);
				tree2[i+N] = cost(tree[i-1+N], tree[i+N]);
				for (int j = (i+N) >> 1; j; j >>= 1) {
					tree2[j] = tree2[j*2] + tree2[j*2+1];
				}
			}
		}

	}
};
void test_case() {
	int n, q, S, T;
	cin >> n >> q >> S >> T;
	vector<int> a(n+1);
	for (int &x : a) cin >> x;
	seg st(S, T, a);
	while (q--) {
		int l, r, x;
		cin >> l >> r >> x;
		st.update(1, 0, st.N-1, l, r, x);
		st.update2(l);
		st.update2(r);
		cout << st.tree2[1] << '\n';
	}



}
int main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
//    cin >> t;
    while (t--) test_case();
}

# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 856 KB Output is correct
2 Correct 4 ms 600 KB Output is correct
3 Correct 4 ms 600 KB Output is correct
4 Correct 4 ms 604 KB Output is correct
5 Correct 5 ms 620 KB Output is correct
6 Correct 4 ms 600 KB Output is correct
7 Correct 4 ms 604 KB Output is correct
8 Correct 4 ms 600 KB Output is correct
9 Correct 5 ms 604 KB Output is correct
10 Correct 5 ms 604 KB Output is correct
11 Correct 4 ms 604 KB Output is correct
12 Correct 4 ms 640 KB Output is correct
13 Correct 5 ms 604 KB Output is correct
14 Correct 3 ms 600 KB Output is correct
15 Correct 4 ms 600 KB Output is correct
16 Correct 4 ms 604 KB Output is correct
17 Correct 3 ms 624 KB Output is correct
18 Correct 5 ms 604 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 583 ms 22456 KB Output is correct
2 Correct 557 ms 23072 KB Output is correct
3 Correct 520 ms 23660 KB Output is correct
4 Correct 585 ms 23044 KB Output is correct
5 Correct 733 ms 24136 KB Output is correct
6 Correct 433 ms 23464 KB Output is correct
7 Correct 378 ms 23196 KB Output is correct
8 Correct 545 ms 24020 KB Output is correct
9 Correct 510 ms 24244 KB Output is correct
10 Correct 589 ms 22848 KB Output is correct
11 Correct 416 ms 23116 KB Output is correct
12 Correct 398 ms 23892 KB Output is correct
13 Correct 392 ms 24000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 856 KB Output is correct
2 Correct 4 ms 600 KB Output is correct
3 Correct 4 ms 600 KB Output is correct
4 Correct 4 ms 604 KB Output is correct
5 Correct 5 ms 620 KB Output is correct
6 Correct 4 ms 600 KB Output is correct
7 Correct 4 ms 604 KB Output is correct
8 Correct 4 ms 600 KB Output is correct
9 Correct 5 ms 604 KB Output is correct
10 Correct 5 ms 604 KB Output is correct
11 Correct 4 ms 604 KB Output is correct
12 Correct 4 ms 640 KB Output is correct
13 Correct 5 ms 604 KB Output is correct
14 Correct 3 ms 600 KB Output is correct
15 Correct 4 ms 600 KB Output is correct
16 Correct 4 ms 604 KB Output is correct
17 Correct 3 ms 624 KB Output is correct
18 Correct 5 ms 604 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 583 ms 22456 KB Output is correct
23 Correct 557 ms 23072 KB Output is correct
24 Correct 520 ms 23660 KB Output is correct
25 Correct 585 ms 23044 KB Output is correct
26 Correct 733 ms 24136 KB Output is correct
27 Correct 433 ms 23464 KB Output is correct
28 Correct 378 ms 23196 KB Output is correct
29 Correct 545 ms 24020 KB Output is correct
30 Correct 510 ms 24244 KB Output is correct
31 Correct 589 ms 22848 KB Output is correct
32 Correct 416 ms 23116 KB Output is correct
33 Correct 398 ms 23892 KB Output is correct
34 Correct 392 ms 24000 KB Output is correct
35 Correct 653 ms 22668 KB Output is correct
36 Correct 564 ms 23912 KB Output is correct
37 Correct 555 ms 24720 KB Output is correct
38 Correct 576 ms 24816 KB Output is correct
39 Correct 637 ms 24784 KB Output is correct
40 Correct 532 ms 24400 KB Output is correct
41 Correct 582 ms 24296 KB Output is correct
42 Correct 652 ms 24400 KB Output is correct
43 Correct 544 ms 23836 KB Output is correct
44 Correct 565 ms 24100 KB Output is correct
45 Correct 533 ms 24172 KB Output is correct
46 Correct 570 ms 25164 KB Output is correct
47 Correct 389 ms 23992 KB Output is correct
48 Correct 376 ms 23788 KB Output is correct
49 Correct 540 ms 22888 KB Output is correct
50 Correct 408 ms 23608 KB Output is correct
51 Correct 465 ms 24064 KB Output is correct
52 Correct 456 ms 23872 KB Output is correct