提出 #75559409
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define int ll
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
mt19937_64 rng(std::chrono::system_clock::now().time_since_epoch().count());
struct SegTree{
int size;
vector<int>arr;
vector<int>pre;
vector<int>suf;
vector<int>seg;
vector<int>maxs;
void init(int n){
size = 1;
while(size<n)size*=2;
arr.assign(2*size,0LL);
pre.assign(2*size,0LL);
suf.assign(2*size,0LL);
seg.assign(2*size,0LL);
maxs.assign(2*size,0LL);
}
void set(int i, int v, int x, int lx, int rx){
if(rx-lx==1){
arr[x] = v;
pre[x] = max(0LL,v);
suf[x] = max(0LL,v);
seg[x] = max(0LL,v);
maxs[x] = v;
return;
}
int m = (lx+rx)/2;
if(i<m){
set(i,v,2*x+1,lx,m);
}
else{
set(i,v,2*x+2,m,rx);
}
arr[x] = arr[2*x+1]+arr[2*x+2];
pre[x] = max(pre[2*x+1],arr[2*x+1]+pre[2*x+2]);
suf[x] = max(suf[2*x+2],suf[2*x+1]+arr[2*x+2]);
seg[x] = max(seg[2*x+1],max(seg[2*x+2],suf[2*x+1]+pre[2*x+2]));
maxs[x] = max(maxs[2*x+1],maxs[2*x+2]);
}
void set(int i,int v){
set(i,v,0,0,size);
}
vector<int> query(int l,int r, int x, int lx, int rx){
vector<int>res(4);//sum,prefix,suffix,segment
if(lx>=r||l>=rx)return {0,0,0,0};
if(lx>=l&&rx<=r){
res[0] = arr[x];
res[1] = pre[x];
res[2] = suf[x];
res[3] = seg[x];
return res;
}
int m = (lx+rx)/2;
vector<int>res1 = query(l,r,2*x+1,lx,m);
vector<int>res2 = query(l,r,2*x+2,m,rx);
res[0] = res1[0]+res2[0];
res[1] = max(res1[1],res1[0]+res2[1]);
res[2] = max(res2[2],res1[2]+res2[0]);
res[3] = max(res1[3],max(res2[3],res1[2]+res2[1]));
return res;
}
int query(int l, int r){
vector<int>res = query(l,r,0,0,size);
return res[3];
}
int query2(int l,int r, int x, int lx, int rx){
if(lx>=r||l>=rx)return -1*(int)1e9;
if(lx>=l&&rx<=r)return maxs[x];
int m = (lx+rx)/2;
int s1 = query2(l,r,2*x+1,lx,m);
int s2 = query2(l,r,2*x+2,m,rx);
return max(s1,s2);
}
int query2(int l, int r){
return query2(l,r,0,0,size);
}
};
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n,q;
cin >> n >> q;
vector<int>a(n+1);
int sum = 0;
for(int i = 1; i<=n; i++){
cin >> a[i];
sum += a[i];
}
SegTree seg; seg.init(n+5);
auto modify = [&](int i) -> void {
if(a[i] == 0){
seg.set(i,-1);
}
else{
seg.set(i,a[i]);
}
};
for(int i = 1; i<=n; i++){
modify(i);
}
while(q--){
int i,v;
cin >> i >> v;
sum -= a[i];
a[i] = v;
sum += a[i];
modify(i);
cout << sum - seg.query(1,n+1) << '\n';
}
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
G - 口 |
| ユーザ |
kevinyang |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
4 |
| コード長 |
3335 Byte |
| 結果 |
AC |
| 実行時間 |
192 ms |
| メモリ |
14536 KiB |
ジャッジ結果
| セット名 |
Sample |
Subtask |
All |
| 得点 / 配点 |
0 / 0 |
2 / 2 |
2 / 2 |
| 結果 |
|
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt |
| Subtask |
00_sample_00.txt, 00_sample_01.txt, 01_subtask_00.txt, 01_subtask_01.txt, 01_subtask_02.txt, 01_subtask_03.txt, 01_subtask_04.txt, 01_subtask_05.txt, 01_subtask_06.txt, 01_subtask_07.txt, 01_subtask_08.txt, 01_subtask_09.txt, 01_subtask_10.txt, 01_subtask_11.txt, 01_subtask_12.txt, 01_subtask_13.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 01_subtask_00.txt, 01_subtask_01.txt, 01_subtask_02.txt, 01_subtask_03.txt, 01_subtask_04.txt, 01_subtask_05.txt, 01_subtask_06.txt, 01_subtask_07.txt, 01_subtask_08.txt, 01_subtask_09.txt, 01_subtask_10.txt, 01_subtask_11.txt, 01_subtask_12.txt, 01_subtask_13.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3508 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3536 KiB |
| 01_subtask_00.txt |
AC |
1 ms |
3500 KiB |
| 01_subtask_01.txt |
AC |
27 ms |
14432 KiB |
| 01_subtask_02.txt |
AC |
25 ms |
14500 KiB |
| 01_subtask_03.txt |
AC |
25 ms |
14520 KiB |
| 01_subtask_04.txt |
AC |
25 ms |
14484 KiB |
| 01_subtask_05.txt |
AC |
25 ms |
14484 KiB |
| 01_subtask_06.txt |
AC |
25 ms |
14380 KiB |
| 01_subtask_07.txt |
AC |
26 ms |
14536 KiB |
| 01_subtask_08.txt |
AC |
26 ms |
14484 KiB |
| 01_subtask_09.txt |
AC |
26 ms |
14484 KiB |
| 01_subtask_10.txt |
AC |
26 ms |
14484 KiB |
| 01_subtask_11.txt |
AC |
24 ms |
14520 KiB |
| 01_subtask_12.txt |
AC |
26 ms |
14484 KiB |
| 01_subtask_13.txt |
AC |
24 ms |
14468 KiB |
| 02_random_00.txt |
AC |
188 ms |
14380 KiB |
| 02_random_01.txt |
AC |
189 ms |
14420 KiB |
| 02_random_02.txt |
AC |
190 ms |
14444 KiB |
| 02_random_03.txt |
AC |
188 ms |
14520 KiB |
| 02_random_04.txt |
AC |
187 ms |
14468 KiB |
| 02_random_05.txt |
AC |
192 ms |
14492 KiB |
| 02_random_06.txt |
AC |
191 ms |
14468 KiB |
| 02_random_07.txt |
AC |
191 ms |
14536 KiB |
| 02_random_08.txt |
AC |
191 ms |
14520 KiB |
| 02_random_09.txt |
AC |
191 ms |
14432 KiB |
| 02_random_10.txt |
AC |
189 ms |
14484 KiB |
| 02_random_11.txt |
AC |
173 ms |
14432 KiB |