結果
| 問題 |
No.865 24時間降水量
|
| コンテスト | |
| ユーザー |
minato
|
| 提出日時 | 2019-12-24 03:26:26 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,061 ms / 2,000 ms |
| コード長 | 1,806 bytes |
| コンパイル時間 | 2,024 ms |
| コンパイル使用メモリ | 187,036 KB |
| 実行使用メモリ | 12,828 KB |
| 最終ジャッジ日時 | 2024-09-19 08:54:52 |
| 合計ジャッジ時間 | 6,727 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 |
ソースコード
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define EPS (1e-7)
#define INF (1e9)
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) x.begin(),x.end()
const double PI = acos(-1);
const ll MOD = 1000000007;
template<class T>
inline bool chmax(T &a, T b) {
if(a < b) {
a = b;
return true;
}
return false;
}
template<class T>
inline bool chmin(T &a, T b) {
if(a > b) {
a = b;
return true;
}
return false;
}
///////////////////////////////////////////////////////////////
struct SegmentTree {
private:
int n;
vector<ll> node;
public:
SegmentTree(vector<ll> v) {
int sz = v.size();
n = 1; while (n < sz) n *= 2;
node.resize(2*n-1,0);
rep(i,sz) node[i+n-1] = v[i];
for (int i = n-2; i >= 0; i--) node[i] = node[2*i+1] + node[2*i+2];
}
void update(int x, ll val) {
x += (n-1);
node[x] = val;
while (x > 0) {
x = (x - 1) / 2;
node[x] = node[2*x+1] + node[2*x+2];
}
}
ll getsum(int a, int b, int k = 0, int l = 0, int r = -1) {
if (r < 0) r = n;
if (b <= l || r <= a) return 0;
if(a <= l && r <= b) return node[k];
ll vl = getsum(a, b, 2*k+1, l, (l+r)/2);
ll vr = getsum(a, b, 2*k+2, (l+r)/2, r);
return vl + vr;
}
};
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
int N; cin >> N;
vector<ll> A(N);
rep(i,N) cin >> A[i];
int Q; cin >> Q;
vector<int> T(Q);
vector<ll> V(Q);
rep(i,Q) cin >> T[i] >> V[i];
rep(i,Q) T[i]--;
SegmentTree RSQ(A);
ll ans = 0;
int k = -1;
rep(i, N-23) chmax(ans,RSQ.getsum(i,i+24));
rep(i,Q) {
RSQ.update(T[i],V[i]);
for (int j = max(0,T[i]-23); j < min(N-23,T[i]+1); j++) {
chmax(ans,RSQ.getsum(j,j+24));
}
cout << ans << endl;
}
}
minato