Submission #143295

# Submission time Handle Problem Language Result Execution time Memory
143295 2019-08-13T14:31:02 Z godwind Foehn Phenomena (JOI17_foehn_phenomena) C++14
100 / 100
698 ms 28152 KB
#pragma GCC optimize("Ofast")
#pragma GCC optimize("no-stack-protector")
//#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stdio.h>
#include <cstdio>
#include <math.h>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <deque>
#include <random>
#include <iomanip>
#include <bitset>
                        
using namespace std;
                        
template<typename T> void uin(T &a, T b) {
    if (b < a) {
        a = b;
    }
}
                        
template<typename T> void uax(T &a, T b) {
    if (b > a) {
        a = b;
    }
}

#define int long long
#define ghost signed
#define left left228
#define right right228
#define complex complex228
#define count count228
#define sin sin228
#define list list228

const int N = 200 * 1000 + 228;

int n, q, s, t;
int a[N];

struct node
{
	int sum, mod;
	int l, r;
	node() {sum = mod = l = r = 0;}
};
vector<node> d;
void build(int l, int r, int v = 1) {
	d[v].l = l, d[v].r = r;
	if (l == r) d[v].sum = a[l];
	else {
		int m = (l + r) >> 1;
		build(l, m, v << 1), build(m + 1, r, v << 1 | 1);
		d[v].sum = d[v << 1].sum + d[v << 1 | 1].sum;
	}
}
int gets(int v) { return d[v].sum + d[v].mod * (d[v].r - d[v].l + 1); }
void push(int v) {
	d[v << 1].mod += d[v].mod, d[v << 1 | 1].mod += d[v].mod, d[v].mod = 0;
	d[v].sum = gets(v << 1) + gets(v << 1 | 1);
}
void update(int l, int r, int x, int v = 1) {
	if (l > r || d[v].l > r || d[v].r < l) return;
	if (l <= d[v].l && d[v].r <= r) d[v].mod += x;
	else {
		push(v);
		update(l, r, x, v << 1), update(l, r, x, v << 1 | 1);
		d[v].sum = gets(v << 1) + gets(v << 1 | 1);
	}
}
int get(int i, int v = 1) {
	if (d[v].l == d[v].r) return gets(v);
	push(v);
	if (i <= (d[v].l + d[v].r) >> 1) return get(i, v << 1);
	return get(i, v << 1 | 1);
}
void init(int n) {
	int ss = 1; while (ss < n) ss <<= 1;
	ss <<= 1; d.resize(ss + 3, node()); build(1, n);
}

int res = 0;

int f(int i) {
	if (!i || i > n + 1) return 0;
	int A = get(i - 1), B = get(i);
	if (A < B) return -(B - A) * s;
	return (A - B) * t;
}

ghost main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
	cin >> n >> q >> s >> t;
	for (int i = 1; i <= n + 1; ++i) cin >> a[i];
	for (int i = 2; i <= n + 1; ++i) {
		if (a[i - 1] < a[i]) res -= s * (a[i] - a[i - 1]);
		else res += t * (a[i - 1] - a[i]);
	}
	init(n + 1);
	while (q--) {
		int l, r, x;
		cin >> l >> r >> x;
		++l, ++r;
		res -= f(l);
		res -= f(r + 1);
		update(l, r, x);
		res += f(l);
		res += f(r + 1);
		cout << res << '\n';
	}
    return 0;
} // kek ;
// Ого! Кажетсья это $#@!
 

















# Verdict Execution time Memory Grader output
1 Correct 6 ms 632 KB Output is correct
2 Correct 6 ms 504 KB Output is correct
3 Correct 6 ms 632 KB Output is correct
4 Correct 6 ms 632 KB Output is correct
5 Correct 6 ms 632 KB Output is correct
6 Correct 6 ms 504 KB Output is correct
7 Correct 6 ms 632 KB Output is correct
8 Correct 6 ms 632 KB Output is correct
9 Correct 6 ms 632 KB Output is correct
10 Correct 6 ms 632 KB Output is correct
11 Correct 6 ms 632 KB Output is correct
12 Correct 6 ms 632 KB Output is correct
13 Correct 5 ms 632 KB Output is correct
14 Correct 5 ms 632 KB Output is correct
15 Correct 6 ms 632 KB Output is correct
16 Correct 5 ms 504 KB Output is correct
17 Correct 4 ms 504 KB Output is correct
18 Correct 5 ms 632 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 380 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 687 ms 25308 KB Output is correct
2 Correct 673 ms 25904 KB Output is correct
3 Correct 673 ms 26488 KB Output is correct
4 Correct 682 ms 25976 KB Output is correct
5 Correct 687 ms 27100 KB Output is correct
6 Correct 369 ms 26188 KB Output is correct
7 Correct 366 ms 25848 KB Output is correct
8 Correct 548 ms 26900 KB Output is correct
9 Correct 562 ms 27128 KB Output is correct
10 Correct 553 ms 25724 KB Output is correct
11 Correct 456 ms 25860 KB Output is correct
12 Correct 400 ms 26744 KB Output is correct
13 Correct 357 ms 27000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 632 KB Output is correct
2 Correct 6 ms 504 KB Output is correct
3 Correct 6 ms 632 KB Output is correct
4 Correct 6 ms 632 KB Output is correct
5 Correct 6 ms 632 KB Output is correct
6 Correct 6 ms 504 KB Output is correct
7 Correct 6 ms 632 KB Output is correct
8 Correct 6 ms 632 KB Output is correct
9 Correct 6 ms 632 KB Output is correct
10 Correct 6 ms 632 KB Output is correct
11 Correct 6 ms 632 KB Output is correct
12 Correct 6 ms 632 KB Output is correct
13 Correct 5 ms 632 KB Output is correct
14 Correct 5 ms 632 KB Output is correct
15 Correct 6 ms 632 KB Output is correct
16 Correct 5 ms 504 KB Output is correct
17 Correct 4 ms 504 KB Output is correct
18 Correct 5 ms 632 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 380 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 687 ms 25308 KB Output is correct
23 Correct 673 ms 25904 KB Output is correct
24 Correct 673 ms 26488 KB Output is correct
25 Correct 682 ms 25976 KB Output is correct
26 Correct 687 ms 27100 KB Output is correct
27 Correct 369 ms 26188 KB Output is correct
28 Correct 366 ms 25848 KB Output is correct
29 Correct 548 ms 26900 KB Output is correct
30 Correct 562 ms 27128 KB Output is correct
31 Correct 553 ms 25724 KB Output is correct
32 Correct 456 ms 25860 KB Output is correct
33 Correct 400 ms 26744 KB Output is correct
34 Correct 357 ms 27000 KB Output is correct
35 Correct 673 ms 25536 KB Output is correct
36 Correct 684 ms 26872 KB Output is correct
37 Correct 685 ms 27696 KB Output is correct
38 Correct 671 ms 27496 KB Output is correct
39 Correct 698 ms 27512 KB Output is correct
40 Correct 676 ms 27376 KB Output is correct
41 Correct 677 ms 27384 KB Output is correct
42 Correct 676 ms 27384 KB Output is correct
43 Correct 680 ms 26664 KB Output is correct
44 Correct 684 ms 26940 KB Output is correct
45 Correct 668 ms 27180 KB Output is correct
46 Correct 675 ms 28152 KB Output is correct
47 Correct 374 ms 26744 KB Output is correct
48 Correct 415 ms 26520 KB Output is correct
49 Correct 662 ms 25648 KB Output is correct
50 Correct 459 ms 26616 KB Output is correct
51 Correct 411 ms 26868 KB Output is correct
52 Correct 563 ms 26616 KB Output is correct