結果
| 問題 |
No.865 24時間降水量
|
| コンテスト | |
| ユーザー |
chocopuu
|
| 提出日時 | 2019-08-16 22:18:53 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,219 bytes |
| コンパイル時間 | 1,747 ms |
| コンパイル使用メモリ | 176,608 KB |
| 実行使用メモリ | 14,956 KB |
| 最終ジャッジ日時 | 2024-09-22 17:47:58 |
| 合計ジャッジ時間 | 6,216 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | WA * 18 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(i, s, n) for (int i = (s); i < (n); i++)
#define RFOR(i, s, n) for (int i = (n) - 1; i >= (s); i--)
#define REP(i, n) FOR(i, 0, n)
#define RREP(i, n) RFOR(i, 0, n)
#define ALL(a) a.begin(), a.end()
const long long MOD = 1e9+7, INF = 1e18;
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;}
template<class T>
class SegmentTree{
private:
int N;
T initVal;
std::vector<T>ary;
std::function<T(T&,T&)>merge;
void init(int n){
while(N < n)N <<= 1;
ary.resize(N << 1,initVal);
}
public:
SegmentTree(int n,T initVal,std::function<T(T&,T&)>f):
N(1),initVal(initVal),merge(f){init(n);}
// -- a[i] = val;
inline void update(int i,T val){
ary[i += N] = val;
while(i > 1){
i >>= 1;
ary[i] = merge(ary[i << 1],ary[(i << 1) + 1]);
}
}
// -- a[i] += val;
inline void add(int i,T val){
update(i,ary[i + N] + val);
}
// -- [l,r)
inline T query(int l,int r){
if(l >= r)return initVal;
T vr = initVal,vl = initVal;
for(l += N,r += N;l != r;l >>= 1,r >>= 1){
if(l & 1)vl = merge(vl,ary[l++]);
if(r & 1)vr = merge(vr,ary[--r]);
}
return merge(vl,vr);
}
/*
void debug show(){
for(iint i = N;i < N;i++)std::cerr << ary[i] << ' ';
std:::cerr << '\n';
}
*/
};
using ST = SegmentTree<int>;
#define SUM ST(n,0,[](int &a,int &b){return a+b};);
#define MIN ST(n,INF,[](int &a,int &b){return min(a,b);});
#define MAX ST(N,0,[](int &a,int &b){return max(a,b);});
//REP(i,N)f(seg.query(0,i),seg.query(i+1,N))でiを除いた全探索
signed main(){
int N;
cin>>N;
vector<int>a(N);
REP(i,N)cin>>a[i];
auto seg = ST(N,0,[](int &a,int &b){return max(a,b);});
REP(i,N){
seg.add(i,a[i]);
REP(j,23){
int l = i - j - 1;
if(l>=0)seg.add(l,a[i]);
int r = i + j + 1;
if(r<N)seg.add(r,a[i]);
}
}
vector<pair<int,int>>ans;
int Q;
cin>>Q;
REP(i,Q){
int t,x;
cin>>t>>x;
t--;
seg.add(t,x-a[t]);
REP(j,23){
int l = t - j - 1;
if(l>=0)seg.add(l,x-a[t]);
}
a[t] = x;
ans.push_back({i+1,seg.query(0,N-23)});
}
for(auto e:ans){
cout<<e.second<<endl;
}
}
chocopuu