Submission #3247794
Source Code Expand
#pragma GCC optimize ("O3") #pragma GCC target ("sse4") #include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #include <ext/rope> using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; template<class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; using namespace std; /***********************************************/ /* Dear online judge: * I've read the problem, and tried to solve it. * Even if you don't accept my solution, you should respect my effort. * I hope my code compiles and gets accepted. * ___ __ _______ _______ * |\ \|\ \ |\ ___ \ |\ ___ \ * \ \ \/ /|_\ \ __/| \ \ __/| * \ \ ___ \\ \ \_|/__\ \ \_|/__ * \ \ \\ \ \\ \ \_|\ \\ \ \_|\ \ * \ \__\\ \__\\ \_______\\ \_______\ * \|__| \|__| \|_______| \|_______| */ const long double mod = 1000000007; long long inf = 1000000000000000ll; const int mxN = 200010; long long dp[2][mxN]; long long A[mxN]; long long P[mxN]; int N,K; vector<long long> ind[mxN]; vector<long long> rmd[mxN]; vector<long long> inp[mxN]; long long get(long long mn) { long long p = 0; for(int i = N-1;i >= 0;i--) { p += A[i]; if(p >= mn) dp[1][i] = p; else dp[1][i] = inf; } for(int k = 2;k <= K;k++) { int d = k&1; int o = !d; multiset<long long> dpm; long long mnp = inf; for(int i = N-1;i >= 0;i--) { dp[d][i] = inf; while(!ind[i].empty()) { auto s = ind[i].back(); ind[i].pop_back(); dpm.insert(s); } while(!rmd[i].empty()) { auto s = rmd[i].back(); rmd[i].pop_back(); dpm.erase(dpm.find(s)); } while(!inp[i].empty()) { auto s = inp[i].back(); inp[i].pop_back(); mnp = min(mnp,s); } if(!dpm.empty()) dp[d][i] = min(dp[d][i], *dpm.begin()); if(mnp < inf) dp[d][i] = min(dp[d][i], mnp - (i?P[i-1]:0)); if(i && P[i-1] >= mn && dp[o][i] < inf) { int at = upper_bound(P,P+i,P[i-1] - mn) - P; assert(at < i); assert(P[i-1] - (at?P[at-1]:0) >= mn); ind[at].push_back(dp[o][i]); if(dp[o][i] <= P[i-1]) { int to = upper_bound(P,P+at+1,P[i-1] - dp[o][i]) - P; assert(to <= at); assert(P[i-1] - (to?P[to-1]:0) >= dp[o][i]); rmd[to].push_back(dp[o][i]), inp[to].push_back(P[i-1]); } } } } return dp[K&1][0]; } int validate(long long mn) { int cnt = 0; for(int i = 0;i < N;) { int j = i; while(j < N && P[j] - (i?P[i-1]:0) < mn) j++; if(j != N) cnt++; i = j + 1; } return cnt; } int main(int argc, char** argv) { ios_base::sync_with_stdio(false); cin.tie(nullptr); int T; // cin>>T; T = 1; while(T--) { cin>>N; K = 4; for(int i = 0;i < N;i++) cin>>A[i], P[i] = (i?P[i-1]:0) + A[i]; inf = P[N-1] + 1; long long lo = 1,hi = P[N-1],out = inf, mout = hi; while(lo <= hi) { long long md = (lo + hi) >> 1; if(validate(md) >= K) { mout = md; lo = md + 1; } else { hi = md - 1; } } out = get(mout) - mout; cout<<out<<'\n'; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Equal Cut |
User | vjudge5 |
Language | C++14 (GCC 5.4.1) |
Score | 0 |
Code Size | 3051 Byte |
Status | WA |
Exec Time | 109 ms |
Memory | 34664 KB |
Judge Result
Set Name | Sample | All | ||||||
---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 0 / 600 | ||||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt |
All | sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 9 ms | 18688 KB |
sample_02.txt | AC | 9 ms | 18688 KB |
sample_03.txt | AC | 9 ms | 18688 KB |
subtask_1_01.txt | AC | 9 ms | 18688 KB |
subtask_1_02.txt | AC | 78 ms | 26752 KB |
subtask_1_03.txt | AC | 38 ms | 21504 KB |
subtask_1_04.txt | AC | 56 ms | 24192 KB |
subtask_1_05.txt | AC | 9 ms | 18688 KB |
subtask_1_06.txt | AC | 17 ms | 20096 KB |
subtask_1_07.txt | AC | 48 ms | 23680 KB |
subtask_1_08.txt | AC | 39 ms | 24560 KB |
subtask_1_09.txt | AC | 47 ms | 23680 KB |
subtask_1_10.txt | WA | 86 ms | 31592 KB |
subtask_1_11.txt | AC | 71 ms | 26496 KB |
subtask_1_12.txt | AC | 57 ms | 24308 KB |
subtask_1_13.txt | AC | 53 ms | 23808 KB |
subtask_1_14.txt | AC | 22 ms | 21876 KB |
subtask_1_15.txt | AC | 17 ms | 19584 KB |
subtask_1_16.txt | AC | 43 ms | 24816 KB |
subtask_1_17.txt | AC | 33 ms | 23168 KB |
subtask_1_18.txt | AC | 10 ms | 19072 KB |
subtask_1_19.txt | AC | 64 ms | 24952 KB |
subtask_1_20.txt | AC | 79 ms | 26880 KB |
subtask_1_21.txt | AC | 42 ms | 21760 KB |
subtask_1_22.txt | AC | 32 ms | 21376 KB |
subtask_1_23.txt | AC | 64 ms | 24064 KB |
subtask_1_24.txt | AC | 80 ms | 30568 KB |
subtask_1_25.txt | AC | 92 ms | 32488 KB |
subtask_1_26.txt | AC | 79 ms | 30312 KB |
subtask_1_27.txt | AC | 103 ms | 34376 KB |
subtask_1_28.txt | AC | 109 ms | 34664 KB |
subtask_1_29.txt | AC | 84 ms | 30056 KB |
subtask_1_30.txt | AC | 73 ms | 25196 KB |
subtask_1_31.txt | AC | 97 ms | 26364 KB |
subtask_1_32.txt | AC | 67 ms | 27616 KB |
subtask_1_33.txt | AC | 60 ms | 24556 KB |
subtask_1_34.txt | AC | 76 ms | 30696 KB |
subtask_1_35.txt | AC | 58 ms | 25196 KB |
subtask_1_36.txt | AC | 87 ms | 33012 KB |
subtask_1_37.txt | WA | 80 ms | 30440 KB |