Submission #1174460


Source Code Expand

using System;
using System.Text;
using System.Collections.Generic;
class Solve{
    public Solve(){}
    int N;
    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]);
        }
        int M = int.Parse(Console.ReadLine());
        for(int j=0;j<M;j++){
            str = Console.ReadLine().Split(' ');
            long originalT = T[int.Parse(str[0])-1];
            T[int.Parse(str[0])-1] = int.Parse(str[1]);
            long[] DP = new long[N];
            long[] sum = new long[N];
            sum[0] = T[0];
            for(int i=1;i<N;i++){
                sum[i] = sum[i-1] + T[i];
            }
            ConvexHullTrick Con = new ConvexHullTrick(N+1);
            Con.Add(-1,1);
            for(int i=0;i<N;i++){
                DP[i] = Math.Max(i == 0 ? 0 : DP[i-1],Con.Query(-i)-sum[i]+i*(i+1)/2);
                Con.Add(i,DP[i]+sum[i]+i*(i-1)/2);
            }
            sb.Append(DP[N-1]+"\n");
            T[int.Parse(str[0])-1] = originalT;
        }
    }
}

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 0
Code Size 2972 Byte
Status TLE
Exec Time 2104 ms
Memory 48928 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1400
Status
AC × 2
AC × 6
TLE × 48
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 11092 KB
sample_02.txt AC 21 ms 11092 KB
subtask_1_high_equaly_01.txt TLE 2104 ms 31892 KB
subtask_1_high_equaly_02.txt TLE 2104 ms 28284 KB
subtask_1_high_equaly_03.txt TLE 2104 ms 17356 KB
subtask_1_high_equaly_04.txt TLE 2104 ms 29432 KB
subtask_1_high_rand_01.txt TLE 2104 ms 33048 KB
subtask_1_high_rand_02.txt TLE 2104 ms 34496 KB
subtask_1_high_rand_03.txt TLE 2104 ms 33636 KB
subtask_1_high_rand_04.txt TLE 2104 ms 34044 KB
subtask_1_killer_01.txt AC 21 ms 9172 KB
subtask_1_killer_02.txt AC 20 ms 9044 KB
subtask_1_low_equaly_01.txt TLE 2104 ms 30764 KB
subtask_1_low_equaly_02.txt TLE 2104 ms 35532 KB
subtask_1_low_equaly_03.txt TLE 2104 ms 32984 KB
subtask_1_low_equaly_04.txt TLE 2104 ms 37640 KB
subtask_1_low_rand_01.txt TLE 2104 ms 37028 KB
subtask_1_low_rand_02.txt TLE 2104 ms 22032 KB
subtask_1_low_rand_03.txt TLE 2104 ms 36048 KB
subtask_1_low_rand_04.txt TLE 2104 ms 29828 KB
subtask_1_max_high_equaly_01.txt TLE 2104 ms 39740 KB
subtask_1_max_high_equaly_02.txt TLE 2104 ms 39736 KB
subtask_1_max_high_equaly_03.txt TLE 2104 ms 37664 KB
subtask_1_max_high_equaly_04.txt TLE 2104 ms 39744 KB
subtask_1_max_high_rand_01.txt TLE 2104 ms 39704 KB
subtask_1_max_high_rand_02.txt TLE 2104 ms 39748 KB
subtask_1_max_high_rand_03.txt TLE 2104 ms 38992 KB
subtask_1_max_high_rand_04.txt TLE 2104 ms 39728 KB
subtask_1_max_low_equaly_01.txt TLE 2104 ms 39680 KB
subtask_1_max_low_equaly_02.txt TLE 2104 ms 35584 KB
subtask_1_max_low_equaly_03.txt TLE 2104 ms 47996 KB
subtask_1_max_low_equaly_04.txt TLE 2104 ms 33532 KB
subtask_1_max_low_rand_01.txt TLE 2104 ms 40048 KB
subtask_1_max_low_rand_02.txt TLE 2104 ms 37860 KB
subtask_1_max_low_rand_03.txt TLE 2104 ms 48928 KB
subtask_1_max_low_rand_04.txt TLE 2104 ms 40272 KB
subtask_1_max_rand_equaly_01.txt TLE 2104 ms 41816 KB
subtask_1_max_rand_equaly_02.txt TLE 2104 ms 39760 KB
subtask_1_max_rand_equaly_03.txt TLE 2104 ms 37724 KB
subtask_1_max_rand_equaly_04.txt TLE 2104 ms 43248 KB
subtask_1_max_rand_rand_01.txt TLE 2104 ms 39756 KB
subtask_1_max_rand_rand_02.txt TLE 2104 ms 43852 KB
subtask_1_max_rand_rand_03.txt TLE 2104 ms 37708 KB
subtask_1_max_rand_rand_04.txt TLE 2104 ms 46932 KB
subtask_1_min_rand_rand_01.txt AC 21 ms 11092 KB
subtask_1_min_rand_rand_02.txt AC 21 ms 11220 KB
subtask_1_rand_equaly_01.txt TLE 2104 ms 27896 KB
subtask_1_rand_equaly_02.txt TLE 2104 ms 35152 KB
subtask_1_rand_equaly_03.txt TLE 2104 ms 31976 KB
subtask_1_rand_equaly_04.txt TLE 2104 ms 29288 KB
subtask_1_rand_rand_01.txt TLE 2104 ms 43168 KB
subtask_1_rand_rand_02.txt TLE 2104 ms 43336 KB
subtask_1_rand_rand_03.txt TLE 2104 ms 40424 KB
subtask_1_rand_rand_04.txt TLE 2104 ms 30424 KB