Submission #4419262
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
using VS = vector<string>; using LL = long long;
using VI = vector<int>; using VVI = vector<VI>;
using PII = pair<int, int>; using PLL = pair<LL, LL>;
using VL = vector<LL>; using VVL = vector<VL>;
#define ALL(a) begin((a)),end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define SZ(a) int((a).size())
#define SORT(c) sort(ALL((c)))
#define RSORT(c) sort(RALL((c)))
#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))
#define FOR(i, s, e) for (int(i) = (s); (i) < (e); (i)++)
#define FORR(i, s, e) for (int(i) = (s); (i) > (e); (i)--)
//#pragma GCC optimize ("-O3")
#ifdef YANG33
#include "mydebug.hpp"
#else
#define DD(x)
#endif
const int INF = 1e9; const LL LINF = 1e16;
const LL MOD = 1000000007; const double PI = acos(-1.0);
int DX[8] = { 0, 0, 1, -1, 1, 1, -1, -1 }; int DY[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };
/* ----- __MAKE_TIME__ Problem: __PROBLEM__ / Link: __CONTEST_URL__ ----- */
/* ------問題------
-----問題ここまで----- */
/* -----解説等-----
----解説ここまで---- */
struct Cumusum {
vector<LL>csum;
Cumusum(vector<LL>&a) {
csum.assign((int)a.size()+1, 0);
for (int i = 0; i < (int)a.size(); i++) {
csum[i + 1] = csum[i] + a[i];
}
}
LL query(int l, int r) {
return csum[r] - csum[l];
}
};
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
LL N;
cin >> N;
VL a(N);
FOR(i, 0, N) {
cin >> a[i];
}
Cumusum A(a);
// [L,R)を絶対値の差が小さくなるように2つに分割する
auto f = [](Cumusum&A, int Lidx, int Ridx) {
LL L = Lidx; LL R = Ridx;
FOR(i, 0, 60) {
int m1 = (2 * L + R) / 3;
int m2 = (L + 2 * R) / 3;
LL dif1 = abs(A.query(Lidx, m1) - A.query(m1, Ridx));
LL dif2 = abs(A.query(Lidx, m2) - A.query(m2, Ridx));
if (dif1 < dif2) {
R = m2;
}
else {
L = m1;
}
}
LL Diff = LINF; int midx = 0;
FOR(k, 1, R - L) {
int m = L + k;
LL diff = abs(A.query(Lidx, m) - A.query(m, Ridx));
if (Diff > diff) {
Diff = diff;
midx = m;
}
}
return PLL(A.query(Lidx, midx), A.query(midx, Ridx));
};
LL ans = LINF;
FOR(i, 2, N - 1) {
PLL ab = f(A, 0, i);//[0,i)
PLL cd = f(A, i, N);
LL Mx = max({ ab.first,ab.second,cd.first,cd.second });
LL Mn = min({ ab.first,ab.second,cd.first,cd.second });
ans = min(ans, Mx - Mn);
}
cout << ans << "\n";
return 0;
}
Submission Info
| Submission Time |
|
| Task |
D - Equal Cut |
| User |
Yang33 |
| Language |
C++14 (GCC 5.4.1) |
| Score |
600 |
| Code Size |
2536 Byte |
| Status |
AC |
| Exec Time |
218 ms |
| Memory |
3328 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 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 |
1 ms |
256 KiB |
| sample_02.txt |
AC |
1 ms |
256 KiB |
| sample_03.txt |
AC |
1 ms |
256 KiB |
| subtask_1_01.txt |
AC |
1 ms |
256 KiB |
| subtask_1_02.txt |
AC |
200 ms |
3072 KiB |
| subtask_1_03.txt |
AC |
94 ms |
1536 KiB |
| subtask_1_04.txt |
AC |
139 ms |
2176 KiB |
| subtask_1_05.txt |
AC |
2 ms |
256 KiB |
| subtask_1_06.txt |
AC |
28 ms |
640 KiB |
| subtask_1_07.txt |
AC |
125 ms |
2048 KiB |
| subtask_1_08.txt |
AC |
80 ms |
1408 KiB |
| subtask_1_09.txt |
AC |
122 ms |
2048 KiB |
| subtask_1_10.txt |
AC |
169 ms |
2688 KiB |
| subtask_1_11.txt |
AC |
193 ms |
3072 KiB |
| subtask_1_12.txt |
AC |
97 ms |
1664 KiB |
| subtask_1_13.txt |
AC |
131 ms |
2176 KiB |
| subtask_1_14.txt |
AC |
44 ms |
896 KiB |
| subtask_1_15.txt |
AC |
27 ms |
640 KiB |
| subtask_1_16.txt |
AC |
113 ms |
1920 KiB |
| subtask_1_17.txt |
AC |
97 ms |
1664 KiB |
| subtask_1_18.txt |
AC |
7 ms |
384 KiB |
| subtask_1_19.txt |
AC |
198 ms |
3200 KiB |
| subtask_1_20.txt |
AC |
204 ms |
3200 KiB |
| subtask_1_21.txt |
AC |
106 ms |
1792 KiB |
| subtask_1_22.txt |
AC |
69 ms |
1280 KiB |
| subtask_1_23.txt |
AC |
176 ms |
2816 KiB |
| subtask_1_24.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_25.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_26.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_27.txt |
AC |
218 ms |
3328 KiB |
| subtask_1_28.txt |
AC |
218 ms |
3328 KiB |
| subtask_1_29.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_30.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_31.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_32.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_33.txt |
AC |
217 ms |
3328 KiB |
| subtask_1_34.txt |
AC |
214 ms |
3328 KiB |
| subtask_1_35.txt |
AC |
214 ms |
3328 KiB |
| subtask_1_36.txt |
AC |
214 ms |
3328 KiB |
| subtask_1_37.txt |
AC |
214 ms |
3328 KiB |