結果
| 問題 |
No.631 Noelちゃんと電車旅行
|
| コンテスト | |
| ユーザー |
wajima_wataru
|
| 提出日時 | 2018-01-07 15:57:26 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,713 bytes |
| コンパイル時間 | 1,148 ms |
| コンパイル使用メモリ | 85,680 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-23 09:59:27 |
| 合計ジャッジ時間 | 7,302 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 21 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <string>
#include <climits>
#include <functional>
#include "math.h"
using namespace std;
typedef long long ll;
static const int SIZE = 1 << 4;
class StarrySkyTree {
public:
vector<ll> segMax;
vector<ll> segAdd;
StarrySkyTree() {
segMax.resize(2 * SIZE + 1, 0);
segAdd.resize(2 * SIZE + 1, 0);
}
void add(int a, int b, ll x, int k = 0, int l = 0, int r = SIZE) {
if (r <= a || b <= l) return;
if (a <= l && r <= b) {
segAdd[k] += x;
return;
}
add(a, b, x, k * 2 + 1, l, (l + r) / 2);
add(a, b, x, k * 2 + 2, (l + r) / 2, r);
segMax[k] = max(segMax[k * 2 + 1] + segAdd[k * 2 + 1], segMax[k * 2 + 2] + segAdd[k * 2 + 2]);
}
ll getMax(int a, int b, int k = 0, int l = 0, int r = SIZE)
{
if (r <= a || b <= l) return 0;
if (a <= l && r <= b) return (segMax[k] + segAdd[k]);
ll left = getMax(a, b, k * 2 + 1, l, (l + r) / 2);
ll right = getMax(a, b, k * 2 + 2, (l + r) / 2, r);
return (max(left, right) + segAdd[k]);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N, M;
cin >> N;
StarrySkyTree sst;
for (int i = 0; i < N - 1; i++) {
ll t;
cin >> t;
sst.add(i, i + 1, t - 3 * i);
for (int j = 0; j < 16; j++) {
cout << sst.segMax[j];
}
cout << endl;
}
cin >> M;
for (int i = 0; i < M; i++) {
int l, r, d;
cin >> l >> r >> d;
sst.add(l - 1, r, d);
cout << max(0LL, sst.getMax(0, N - 1)) + 3 * (N - 1) << endl;
}
}
wajima_wataru