Submission #1174690
Source Code Expand
using System; using System.Text; using System.Collections.Generic; class Solve{ public Solve(){} int N; long[] DPL; long[] DPR; long[] unuse; long[] use; long[] sumL; long[] sumR; StringBuilder sb; public static int Main(){ new Solve().Run(); return 0; } void Run(){ sb = new StringBuilder(); Calc(); Console.Write(sb.ToString()); } void Calc(){ N = int.Parse(Console.ReadLine()); string[] str = Console.ReadLine().Split(' '); long[] T = new long[N]; for(int i=0;i<N;i++){ T[i] = int.Parse(str[i]); } DPL = new long[N]; DPR = new long[N]; { sumL = new long[N]; sumL[0] = T[0]; for(int i=1;i<N;i++){ sumL[i] = sumL[i-1] + T[i]; } ConvexHullTrick Con = new ConvexHullTrick(N+1); Con.Add(-1,1); for(int i=0;i<N;i++){ DPL[i] = Math.Max(i == 0 ? 0 : DPL[i-1],Con.Query(-i)-sumL[i]+(long)i*(long)(i+1)/2); Con.Add(i,DPL[i]+sumL[i]+(long)i*(long)(i-1)/2); } } { sumR = new long[N]; sumR[0] = T[N-1]; for(int i=1;i<N;i++){ sumR[i] = sumR[i-1] + T[N-1-i]; } ConvexHullTrick Con = new ConvexHullTrick(N+1); Con.Add(-1,1); for(int i=0;i<N;i++){ DPR[N-1-i] = Math.Max(i == 0 ? 0 : DPR[N-i],Con.Query(-i)-sumR[i]+(long)i*(long)(i+1)/2); Con.Add(i,DPR[N-1-i]+sumR[i]+(long)i*(long)(i-1)/2); } } unuse = new long[N]; for(int i=0;i<N;i++){ unuse[i] = (i == 0 ? 0 : DPL[i-1]) + (i == N-1 ? 0 : DPR[i+1]); } use = new long[N]; for(int i=0;i<N;i++){ use[i] = -T[i]; } GetUse(0,N-1); int M = int.Parse(Console.ReadLine()); for(int i=0;i<M;i++){ str = Console.ReadLine().Split(' '); int P = int.Parse(str[0])-1; long X = int.Parse(str[1]); sb.Append(Math.Max(unuse[P],use[P]-X+T[P])+"\n"); } } ConvexHullTrick ConL(int l,int r){ ConvexHullTrick Con = new ConvexHullTrick(r-l+1); for(int i=l;i<=r;i++){ if(i == 0){ Con.Add(-1,1); } else{ Con.Add(i-1,DPL[i-1]+sumL[i-1]+(long)(i-1)*(long)(i-2)/2); } } return Con; } ConvexHullTrick ConR(int l,int r){ ConvexHullTrick Con = new ConvexHullTrick(r-l+1); for(int i=N-1-r;i<N-l;i++){ if(i == 0){ Con.Add(-1,1); } else{ Con.Add(i-1,DPR[N-i]+sumR[i-1]+(long)(i-1)*(long)(i-2)/2); } } return Con; } long UseConL(int i){ return -sumL[i]+(long)i*(long)(i+1)/2; } long UseConR(int i){ return -sumR[N-1-i]+(long)(N-1-i)*(long)(N-i)/2; } void GetUse(int l,int r){ int M = (l+r)/2; if(l <= M-1){ GetUse(l,M-1); } if(M+1 <= r){ GetUse(M+1,r); } { ConvexHullTrick Con = ConL(l,M); long max = -1000000000; for(int i=r;i>=M;i--){ max = Math.Max(max,Con.Query(-i)+UseConL(i)+(i == N-1 ? 0 : DPR[i+1])); use[i] = Math.Max(max,use[i]); } } { ConvexHullTrick Con = ConR(M,r); long max = -1000000000; for(int i=l;i<=M;i++){ max = Math.Max(max,Con.Query(-(N-1-i))+UseConR(i)+(i == 0 ? 0 : DPL[i-1])); use[i] = Math.Max(max,use[i]); } } } } struct ConvexHullTrick{ long[] A; long[] B; //C[i]はi番目の点に適用するのがi+1番目の点に適用するよりも大きくなる最大のx 単調増加になる long[] C; int p; int find; public ConvexHullTrick(int N){ A = new long[N]; B = new long[N]; C = new long[N]; p = 0; find = 0; } //aは単調増加でないといけない public void Add(long a,long b){ if(p == 0){ A[0] = a; B[0] = b;; p++; } else{ for(int i=p;i>0;i--){ long X = Compare(A[i-1],B[i-1],a,b); if(i == 1 || X > C[i-2]){ C[i-1] = X; A[i] = a; B[i] = b; p = i+1; break; } } } } //1つはAddしていないといけない public long Query(long x){ return Calc(x,findMax(x)); } int findMax(long x){ find = Math.Min(find,p-1); while(find < p-1 && C[find] < x){ find++; } while(find > 0 && C[find-1] >= x){ find--; } return find; } long Calc(long x,int i){ return A[i]*x + B[i]; } //(a1,b1)に適用する方が(a2,b2)に適用するより大きくなる最大のx long Compare(long a1,long b1,long a2,long b2){ return (b1-b2-1)/(a2-a1) - ((b1-b2-1)%(a2-a1) < 0 ? 1 : 0); } }
Submission Info
Submission Time | |
---|---|
Task | F - Contest with Drinks Hard |
User | leign |
Language | C# (Mono 4.6.2.0) |
Score | 1400 |
Code Size | 5523 Byte |
Status | AC |
Exec Time | 1308 ms |
Memory | 68628 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1400 / 1400 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt |
All | sample_01.txt, sample_02.txt, subtask_1_high_equaly_01.txt, subtask_1_high_equaly_02.txt, subtask_1_high_equaly_03.txt, subtask_1_high_equaly_04.txt, subtask_1_high_rand_01.txt, subtask_1_high_rand_02.txt, subtask_1_high_rand_03.txt, subtask_1_high_rand_04.txt, subtask_1_killer_01.txt, subtask_1_killer_02.txt, subtask_1_low_equaly_01.txt, subtask_1_low_equaly_02.txt, subtask_1_low_equaly_03.txt, subtask_1_low_equaly_04.txt, subtask_1_low_rand_01.txt, subtask_1_low_rand_02.txt, subtask_1_low_rand_03.txt, subtask_1_low_rand_04.txt, subtask_1_max_high_equaly_01.txt, subtask_1_max_high_equaly_02.txt, subtask_1_max_high_equaly_03.txt, subtask_1_max_high_equaly_04.txt, subtask_1_max_high_rand_01.txt, subtask_1_max_high_rand_02.txt, subtask_1_max_high_rand_03.txt, subtask_1_max_high_rand_04.txt, subtask_1_max_low_equaly_01.txt, subtask_1_max_low_equaly_02.txt, subtask_1_max_low_equaly_03.txt, subtask_1_max_low_equaly_04.txt, subtask_1_max_low_rand_01.txt, subtask_1_max_low_rand_02.txt, subtask_1_max_low_rand_03.txt, subtask_1_max_low_rand_04.txt, subtask_1_max_rand_equaly_01.txt, subtask_1_max_rand_equaly_02.txt, subtask_1_max_rand_equaly_03.txt, subtask_1_max_rand_equaly_04.txt, subtask_1_max_rand_rand_01.txt, subtask_1_max_rand_rand_02.txt, subtask_1_max_rand_rand_03.txt, subtask_1_max_rand_rand_04.txt, subtask_1_min_rand_rand_01.txt, subtask_1_min_rand_rand_02.txt, subtask_1_rand_equaly_01.txt, subtask_1_rand_equaly_02.txt, subtask_1_rand_equaly_03.txt, subtask_1_rand_equaly_04.txt, subtask_1_rand_rand_01.txt, subtask_1_rand_rand_02.txt, subtask_1_rand_rand_03.txt, subtask_1_rand_rand_04.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 21 ms | 9172 KB |
sample_02.txt | AC | 22 ms | 13268 KB |
subtask_1_high_equaly_01.txt | AC | 553 ms | 52612 KB |
subtask_1_high_equaly_02.txt | AC | 407 ms | 47720 KB |
subtask_1_high_equaly_03.txt | AC | 106 ms | 15820 KB |
subtask_1_high_equaly_04.txt | AC | 795 ms | 49184 KB |
subtask_1_high_rand_01.txt | AC | 546 ms | 52140 KB |
subtask_1_high_rand_02.txt | AC | 392 ms | 46524 KB |
subtask_1_high_rand_03.txt | AC | 578 ms | 47092 KB |
subtask_1_high_rand_04.txt | AC | 716 ms | 47812 KB |
subtask_1_killer_01.txt | AC | 22 ms | 11220 KB |
subtask_1_killer_02.txt | AC | 22 ms | 13268 KB |
subtask_1_low_equaly_01.txt | AC | 871 ms | 50408 KB |
subtask_1_low_equaly_02.txt | AC | 637 ms | 54136 KB |
subtask_1_low_equaly_03.txt | AC | 734 ms | 59796 KB |
subtask_1_low_equaly_04.txt | AC | 328 ms | 48716 KB |
subtask_1_low_rand_01.txt | AC | 658 ms | 47136 KB |
subtask_1_low_rand_02.txt | AC | 528 ms | 43724 KB |
subtask_1_low_rand_03.txt | AC | 436 ms | 43032 KB |
subtask_1_low_rand_04.txt | AC | 893 ms | 46432 KB |
subtask_1_max_high_equaly_01.txt | AC | 1279 ms | 68584 KB |
subtask_1_max_high_equaly_02.txt | AC | 1288 ms | 61972 KB |
subtask_1_max_high_equaly_03.txt | AC | 1288 ms | 62952 KB |
subtask_1_max_high_equaly_04.txt | AC | 1265 ms | 66596 KB |
subtask_1_max_high_rand_01.txt | AC | 1308 ms | 67040 KB |
subtask_1_max_high_rand_02.txt | AC | 1266 ms | 66424 KB |
subtask_1_max_high_rand_03.txt | AC | 1266 ms | 64208 KB |
subtask_1_max_high_rand_04.txt | AC | 1270 ms | 64108 KB |
subtask_1_max_low_equaly_01.txt | AC | 1242 ms | 60400 KB |
subtask_1_max_low_equaly_02.txt | AC | 1229 ms | 64804 KB |
subtask_1_max_low_equaly_03.txt | AC | 1274 ms | 58336 KB |
subtask_1_max_low_equaly_04.txt | AC | 1237 ms | 58308 KB |
subtask_1_max_low_rand_01.txt | AC | 1249 ms | 60656 KB |
subtask_1_max_low_rand_02.txt | AC | 1253 ms | 62624 KB |
subtask_1_max_low_rand_03.txt | AC | 1230 ms | 64564 KB |
subtask_1_max_low_rand_04.txt | AC | 1240 ms | 58940 KB |
subtask_1_max_rand_equaly_01.txt | AC | 1215 ms | 64548 KB |
subtask_1_max_rand_equaly_02.txt | AC | 1216 ms | 66596 KB |
subtask_1_max_rand_equaly_03.txt | AC | 1249 ms | 64548 KB |
subtask_1_max_rand_equaly_04.txt | AC | 1221 ms | 64544 KB |
subtask_1_max_rand_rand_01.txt | AC | 1217 ms | 64548 KB |
subtask_1_max_rand_rand_02.txt | AC | 1235 ms | 66596 KB |
subtask_1_max_rand_rand_03.txt | AC | 1218 ms | 68628 KB |
subtask_1_max_rand_rand_04.txt | AC | 1235 ms | 64548 KB |
subtask_1_min_rand_rand_01.txt | AC | 22 ms | 11220 KB |
subtask_1_min_rand_rand_02.txt | AC | 22 ms | 13268 KB |
subtask_1_rand_equaly_01.txt | AC | 63 ms | 18264 KB |
subtask_1_rand_equaly_02.txt | AC | 719 ms | 53228 KB |
subtask_1_rand_equaly_03.txt | AC | 323 ms | 35536 KB |
subtask_1_rand_equaly_04.txt | AC | 581 ms | 52756 KB |
subtask_1_rand_rand_01.txt | AC | 872 ms | 64392 KB |
subtask_1_rand_rand_02.txt | AC | 499 ms | 39672 KB |
subtask_1_rand_rand_03.txt | AC | 787 ms | 59296 KB |
subtask_1_rand_rand_04.txt | AC | 329 ms | 27408 KB |