Submission #2118813
Source Code Expand
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class TEST{
static void Main(){
Sol mySol =new Sol();
mySol.Solve();
}
}
class Sol{
public void Solve(){
int NN = 2 * N;
long suma = 0, sumb = 0;
int cnta = 0, cntb = 0;
var STa = new SegTreeMin(NN);
var STb = new SegTreeMin(NN);
for(int i=0;i<NN;i++){
if(i == 0 || i == NN - 1 || A[i] >= B[i]){
suma += A[i];
cnta++;
if(!(i == 0 || i == NN - 1)) STa.Update(i,A[i] - B[i]);
} else {
sumb += B[i];
cntb++;
STb.Update(i,B[i] - A[i]);
}
}
long[] ans = new long[Q];
for(int q=0;q<Q;q++){
int p = P[q];
long x = X[q];
long y = Y[q];
STa.Disable(p);
STb.Disable(p);
if(p == 0 || p == NN - 1 || A[p] >= B[p]){
suma -= A[p];
cnta--;
} else {
sumb -= B[p];
cntb--;
}
A[p] = x;
B[p] = y;
if(p == 0 || p == NN - 1 || A[p] >= B[p]){
suma += A[p];
cnta++;
if(!(p == 0 || p == NN - 1)) STa.Update(p,A[p] - B[p]);
} else {
sumb += B[p];
cntb++;
STb.Update(p,B[p] - A[p]);
}
long maxSum = suma + sumb;
if(cnta % 2 != 0){
maxSum -= Math.Min(STa.QueryMin(0,NN),STb.QueryMin(0,NN));
}
ans[q] = maxSum;
}
Console.WriteLine(String.Join("\n",ans));
}
int N,Q;
long[] A,B;
long[] X,Y;
int[] P;
public Sol(){
var d = ria();
N = d[0]; Q = d[1];
A = rla();
B = rla();
P = new int[Q];
X = new long[Q];
Y = new long[Q];
for(int i=0;i<Q;i++){
d = ria();
P[i] = d[0] - 1;
X[i] = d[1];
Y[i] = d[2];
}
}
static String rs(){return Console.ReadLine();}
static int ri(){return int.Parse(Console.ReadLine());}
static long rl(){return long.Parse(Console.ReadLine());}
static double rd(){return double.Parse(Console.ReadLine());}
static String[] rsa(char sep=' '){return Console.ReadLine().Split(sep);}
static int[] ria(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>int.Parse(e));}
static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));}
static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));}
}
class SegTreeMin{
//segment Tree
// 0-origin
protected long[] Data;
protected long Inf;
protected int N;
protected int n;
public SegTreeMin(int n_){
N = n_; Inf = (long)1e18;
n = 1;
while(n < n_) n *= 2;
Data = new long[2 * n - 1];
for(int i=0; i < 2 * n - 1; i++) Data[i] = Inf;
}
// 0
// 1 2
// 3 4 5 6
public void Update(int k,long a){
k+=n-1;
Data[k]=a;
while(k>0){
k=(k-1)/2;
Data[k]=Math.Min(Data[k*2+1],Data[k*2+2]);
}
}
public long QueryMin(int a, int b){
return Query(a, b, 0, 0, n);
}
//RMQ; [a,b)
public long Query(int a,int b,int k,int l,int r){
if(r <= a || b <= l) return Inf;
if(a <= l && r <= b) return Data[k];
var vl = Query(a, b, k * 2 + 1, l, (l + r) / 2);
var vr = Query(a ,b, k * 2 + 2, (l + r) / 2, r);
return Math.Min(vl, vr);
}
public void Disable(int k){
Update(k, Inf);
}
public bool IsDisabled(int k){
return Data[k + n - 1] == Inf;
}
public long Min{
get{ return Data[0];}
}
public void Dump(){
Console.WriteLine();
int h = 0;
int cnt = 0;
for(int i=0;i<Data.Length;i++){
Console.Write("{0} ", Data[i]);
cnt++;
if(cnt == 1 << h){
cnt = 0;
h++;
Console.WriteLine();
}
}
}
}
Submission Info
Submission Time |
|
Task |
C - Paired Parentheses |
User |
kuuso |
Language |
C# (Mono 4.6.2.0) |
Score |
700 |
Code Size |
3664 Byte |
Status |
AC |
Exec Time |
458 ms |
Memory |
53608 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
All |
Score / Max Score |
0 / 0 |
200 / 200 |
300 / 300 |
200 / 200 |
Status |
|
|
|
|
Set Name |
Test Cases |
Sample |
00_example_01.txt, 00_example_02.txt |
Subtask1 |
00_example_01.txt, s1_01.txt, s1_02.txt, s1_03.txt, s1_04.txt, s1_05.txt, s1_06.txt, s1_07.txt, s1_08.txt, s1_09.txt, s1_10.txt, s1_11.txt, s1_12.txt, s1_13.txt |
Subtask2 |
s2_14.txt, s2_15.txt, s2_16.txt, s2_17.txt, s2_18.txt, s2_19.txt, s2_20.txt, s2_21.txt, s2_22.txt, s2_23.txt, s2_24.txt, s2_25.txt, s2_26.txt, s2_27.txt, s2_28.txt |
All |
00_example_01.txt, 00_example_02.txt, s1_01.txt, s1_02.txt, s1_03.txt, s1_04.txt, s1_05.txt, s1_06.txt, s1_07.txt, s1_08.txt, s1_09.txt, s1_10.txt, s1_11.txt, s1_12.txt, s1_13.txt, s2_14.txt, s2_15.txt, s2_16.txt, s2_17.txt, s2_18.txt, s2_19.txt, s2_20.txt, s2_21.txt, s2_22.txt, s2_23.txt, s2_24.txt, s2_25.txt, s2_26.txt, s2_27.txt, s2_28.txt, s3_29.txt, s3_30.txt, s3_31.txt, s3_32.txt, s3_33.txt, s3_34.txt, s3_35.txt, s3_36.txt, s3_37.txt, s3_38.txt, s3_39.txt, s3_40.txt, s3_41.txt |
Case Name |
Status |
Exec Time |
Memory |
00_example_01.txt |
AC |
24 ms |
13268 KB |
00_example_02.txt |
AC |
22 ms |
9172 KB |
s1_01.txt |
AC |
23 ms |
13268 KB |
s1_02.txt |
AC |
23 ms |
11220 KB |
s1_03.txt |
AC |
23 ms |
13268 KB |
s1_04.txt |
AC |
22 ms |
11220 KB |
s1_05.txt |
AC |
23 ms |
13396 KB |
s1_06.txt |
AC |
22 ms |
11220 KB |
s1_07.txt |
AC |
22 ms |
9172 KB |
s1_08.txt |
AC |
22 ms |
11348 KB |
s1_09.txt |
AC |
22 ms |
11348 KB |
s1_10.txt |
AC |
23 ms |
13268 KB |
s1_11.txt |
AC |
23 ms |
13268 KB |
s1_12.txt |
AC |
23 ms |
13268 KB |
s1_13.txt |
AC |
23 ms |
11348 KB |
s2_14.txt |
AC |
30 ms |
10720 KB |
s2_15.txt |
AC |
32 ms |
14944 KB |
s2_16.txt |
AC |
148 ms |
39596 KB |
s2_17.txt |
AC |
128 ms |
31480 KB |
s2_18.txt |
AC |
196 ms |
28476 KB |
s2_19.txt |
AC |
196 ms |
28492 KB |
s2_20.txt |
AC |
197 ms |
33192 KB |
s2_21.txt |
AC |
199 ms |
30532 KB |
s2_22.txt |
AC |
31 ms |
12768 KB |
s2_23.txt |
AC |
32 ms |
14944 KB |
s2_24.txt |
AC |
30 ms |
14816 KB |
s2_25.txt |
AC |
231 ms |
40736 KB |
s2_26.txt |
AC |
231 ms |
44824 KB |
s2_27.txt |
AC |
230 ms |
40736 KB |
s2_28.txt |
AC |
237 ms |
40796 KB |
s3_29.txt |
AC |
179 ms |
31756 KB |
s3_30.txt |
AC |
222 ms |
29216 KB |
s3_31.txt |
AC |
171 ms |
36120 KB |
s3_32.txt |
AC |
366 ms |
40724 KB |
s3_33.txt |
AC |
177 ms |
34000 KB |
s3_34.txt |
AC |
418 ms |
41996 KB |
s3_35.txt |
AC |
416 ms |
41948 KB |
s3_36.txt |
AC |
451 ms |
47416 KB |
s3_37.txt |
AC |
456 ms |
53608 KB |
s3_38.txt |
AC |
458 ms |
49464 KB |
s3_39.txt |
AC |
450 ms |
47408 KB |
s3_40.txt |
AC |
185 ms |
21432 KB |
s3_41.txt |
AC |
185 ms |
23480 KB |