Submission #2530761


Source Code Expand

#include<bits/stdc++.h>
using namespace std;

using ll=long long;

using T=vector<ll>;
class SegmentTree{
    int N;
    int M;
    vector<T> dat;
    
    T merge(T& x,T& y){
        T res(x.size());
        for(int i=0;i<x.size();i++){
            res[i]=max(x[i],y[i]);
        }
        return res;
    }
    T query_impl(int a,int b,int k,int l,int r){
        if(a<=l && r<=b) return dat[k];
        if(b<=l || r<=a) return T(M);
        int mid=(l+r)/2;
        T x1=query_impl(a,b,k*2+1,l,mid);
        T x2=query_impl(a,b,k*2+2,mid,r);
        return merge(x1,x2);
    }
    public:
    SegmentTree(int n,int m):M(m){
        N=1;
        while(N<n){
            N*=2;
        }
        dat.assign(2*N-1,T(m,0));
    }
    void update(int pos,T& vec){
        pos+=N-1;
        dat[pos]=vec;
        while(pos){
            int par=(pos-1)/2;
            int c1=par*2+1;
            int c2=par*2+2;
            dat[par]=merge(dat[c1],dat[c2]);
            pos=par;
        }
    }
    ll query(int a,int b){
        T res=query_impl(a,b,0,0,N);
        return accumulate(res.begin(),res.end(),0LL);
    }
    
};

vector<ll> asum;
ll dfs(int a,int b,int lb,int ub,SegmentTree& seg){
    if(a==b) return 0;
    int mid=(a+b)/2;
    int opt=max(lb,mid);
    ll res=0;
    for(int i=max(lb,mid);i<ub;i++){
        ll sc=seg.query(mid,i+1)-(asum[i]-asum[mid]);
        if(res<sc){
            opt=i;
            res=sc;
        }
    }

    ll lres=dfs(a,mid,lb,opt+1,seg);
    ll rres=dfs(mid+1,b,max(opt-1,0),ub,seg);
    return max({lres,rres,res});
}
int main(){
    int n,m;
    cin>>n>>m;
    
    vector<ll> a(n-1);
    asum.assign(n,0);
    for(int i=0;i<n-1;i++){
        cin>>a[i];
    }
    for(int i=0;i<n-1;i++){
        asum[i+1]=asum[i]+a[i];
    }
    
    vector<vector<ll>> b(n,vector<ll>(m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>b[i][j];
        }
    }
    SegmentTree seg(n,m);
    for(int i=0;i<n;i++) seg.update(i,b[i]);
    cout<<dfs(0,n,0,n,seg)<<endl;

    return 0;
}

Submission Info

Submission Time
Task F - Yakiniku Restaurants
User nikutto
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2130 Byte
Status AC
Exec Time 1131 ms
Memory 34560 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 2
AC × 30
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, subtask_1_dense_max_01.txt, subtask_1_dense_max_02.txt, subtask_1_dense_max_03.txt, subtask_1_dense_max_04.txt, subtask_1_dense_rand_01.txt, subtask_1_dense_rand_02.txt, subtask_1_dense_rand_03.txt, subtask_1_dense_rand_04.txt, subtask_1_max_01.txt, subtask_1_max_02.txt, subtask_1_max_03.txt, subtask_1_max_04.txt, subtask_1_min_01.txt, subtask_1_min_02.txt, subtask_1_rand_01.txt, subtask_1_rand_02.txt, subtask_1_rand_03.txt, subtask_1_rand_04.txt, subtask_1_widemax_01.txt, subtask_1_widemax_02.txt, subtask_1_widemax_03.txt, subtask_1_widemax_04.txt, subtask_1_widemax_05.txt, subtask_1_widemax_06.txt, subtask_1_widemax_07.txt, subtask_1_widemax_08.txt, subtask_1_widemax_09.txt, subtask_1_widemax_10.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
subtask_1_dense_max_01.txt AC 1102 ms 34560 KB
subtask_1_dense_max_02.txt AC 1100 ms 34560 KB
subtask_1_dense_max_03.txt AC 1097 ms 34560 KB
subtask_1_dense_max_04.txt AC 1083 ms 34560 KB
subtask_1_dense_rand_01.txt AC 649 ms 17152 KB
subtask_1_dense_rand_02.txt AC 709 ms 18048 KB
subtask_1_dense_rand_03.txt AC 33 ms 1024 KB
subtask_1_dense_rand_04.txt AC 166 ms 3840 KB
subtask_1_max_01.txt AC 884 ms 34560 KB
subtask_1_max_02.txt AC 884 ms 34560 KB
subtask_1_max_03.txt AC 884 ms 34560 KB
subtask_1_max_04.txt AC 883 ms 34560 KB
subtask_1_min_01.txt AC 1 ms 256 KB
subtask_1_min_02.txt AC 1 ms 256 KB
subtask_1_rand_01.txt AC 126 ms 4480 KB
subtask_1_rand_02.txt AC 82 ms 2176 KB
subtask_1_rand_03.txt AC 145 ms 5632 KB
subtask_1_rand_04.txt AC 219 ms 6784 KB
subtask_1_widemax_01.txt AC 1106 ms 34560 KB
subtask_1_widemax_02.txt AC 1109 ms 34560 KB
subtask_1_widemax_03.txt AC 1115 ms 34560 KB
subtask_1_widemax_04.txt AC 1110 ms 34560 KB
subtask_1_widemax_05.txt AC 1108 ms 34560 KB
subtask_1_widemax_06.txt AC 1131 ms 34560 KB
subtask_1_widemax_07.txt AC 1100 ms 34560 KB
subtask_1_widemax_08.txt AC 1107 ms 34560 KB
subtask_1_widemax_09.txt AC 1109 ms 34560 KB
subtask_1_widemax_10.txt AC 1102 ms 34560 KB