답안 #883088

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
883088 2023-12-04T13:35:13 Z phoenix0423 Sjeckanje (COCI21_sjeckanje) C++17
110 / 110
660 ms 30356 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pll;
#define fastio ios::sync_with_stdio(false), cin.tie(0)
// #pragma GCC optimize("Ofast")
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define REP1(i, n) FOR(i, 0, n + 1)
#define SZ(x) (int)(x).size()
#define pb push_back
#define pf push_front
#define eb emplace_back
#define f first
#define s second
#define lowbit(x) x&-x
#define ckmin(a, b) a = min(a, b)
#define ckmax(a, b) a = max(a, b)
#define int long long
const int INF = 1e18;
const int maxn = 3e5 + 5;
int n, q;
int a[maxn], dif[maxn];
int dp[maxn * 4][2][2];

void pull(int v, int md){
	for(int l = 0; l < 2; l++){
		for(int r = 0; r < 2; r++){
			dp[v][l][r] = -INF;
			for(int j = 0; j < 2; j++){
				for(int k = 0; k < 2; k++){
					if(j == 1 && k == 1 && ((dif[md] > 0 && dif[md + 1] < 0) || (dif[md] < 0 && dif[md + 1] > 0))) continue;
					dp[v][l][r] = max(dp[v][l][r], dp[v * 2][l][j] + dp[v * 2 + 1][k][r]);
				}
			}
		}
	}
}

void upd(int pos, int v = 1, int l = 0, int r = n - 1){
	if(l == r){
		dp[v][1][1] = abs(dif[l]);
		return;
	}
	int m = (l + r) / 2;
	if(pos <= m) upd(pos, v * 2, l, m);
	else upd(pos, v * 2 + 1, m + 1, r);
	pull(v, m);
}

int qry(){
	return max({dp[1][0][0], dp[1][0][1], dp[1][1][0], dp[1][1][1]});
}
signed main(void){
	fastio;
	cin>>n>>q;
	vector<int> a(n);
	for(int i = 0; i < n; i++) cin>>a[i];
	for(int i = 1; i < n; i++) dif[i] = a[i] - a[i - 1], upd(i);
	for(int i = 0; i < q; i++){
		int l, r, x;
		cin>>l>>r>>x;
		l--;
		dif[l] += x, dif[r] -= x;
		if(l > 0){
			upd(l);
		}
		if(r < n){
			upd(r);
		}
		cout<<qry()<<"\n";
	}

}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 6 ms 4700 KB Output is correct
8 Correct 6 ms 4700 KB Output is correct
9 Correct 8 ms 4700 KB Output is correct
10 Correct 6 ms 4824 KB Output is correct
11 Correct 7 ms 4700 KB Output is correct
12 Correct 7 ms 4700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 6 ms 4700 KB Output is correct
8 Correct 6 ms 4700 KB Output is correct
9 Correct 8 ms 4700 KB Output is correct
10 Correct 6 ms 4824 KB Output is correct
11 Correct 7 ms 4700 KB Output is correct
12 Correct 7 ms 4700 KB Output is correct
13 Correct 660 ms 29752 KB Output is correct
14 Correct 608 ms 30016 KB Output is correct
15 Correct 601 ms 29792 KB Output is correct
16 Correct 561 ms 29524 KB Output is correct
17 Correct 573 ms 29632 KB Output is correct
18 Correct 581 ms 30356 KB Output is correct