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
AC × 3
AC × 41
WA × 2
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