QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#669419 | #9513. 环上排序信息最优分割 | JWRuixi | 30 | 219ms | 26636kb | C++20 | 6.4kb | 2024-10-23 18:34:05 | 2024-10-23 18:34:06 |
Judging History
answer
#ifdef LOCAL
#include "stdafx.h"
#else
#include <bits/stdc++.h>
#define IL inline
#define LL long long
#define eb emplace_back
#define sz(v) ((int) (v).size())
#define me(f, x) memset(f, x, sizeof(f))
#define mc(f, g) memcpy(f, g, sizeof(g))
#define L(i, j, k) for (int i = (j); i <= (k); ++i)
#define R(i, j, k) for (int i = (j); i >= (k); --i)
#define FIO(FILE) freopen(FILE".in", "r", stdin), freopen(FILE".out", "w", stdout)
using namespace std;
using vi = vector<int>;
#endif
namespace vEB_tree_impl {
using u64 = uint64_t;
static constexpr unsigned int lgW = 6;
static constexpr unsigned int W = 1u << lgW;
static constexpr int inf = 1 << 30;
inline int ctz(u64 n) { return n ? __builtin_ctzll(n) : -1; }
inline int clz(u64 n) { return n ? 63 - __builtin_clzll(n) : -1; }
template <int LOG, class D = void>
struct vEB_tree_node {
using Chd = vEB_tree_node<(LOG >> 1)>;
Chd map;
int mn, mx;
static constexpr int shift = (LOG >> 1) * lgW;
array<Chd, 1 << shift> chd;
inline int mask(u64 key) const { return key & ((1 << shift) - 1); }
constexpr vEB_tree_node() : mn(inf), mx(-1) {}
void insert(int key) {
mn = std::min(mn, key), mx = std::max(mx, key);
int pos = key >> shift;
if (chd[pos].empty()) map.insert(pos);
chd[pos].insert(mask(key));
}
void erase(int key) {
int pos = key >> shift;
if (chd[pos].empty()) return;
chd[pos].erase(mask(key));
if (chd[pos].empty()) map.erase(pos);
if (mn == key) {
if (mx == key) {
mn = inf, mx = -1;
} else {
int p = map.min();
mn = (p << shift) + chd[p].min();
}
} else if (mx == key) {
int p = map.max();
mx = (p << shift) + chd[p].max();
}
}
bool contain(int key) const {
int pos = key >> shift;
return chd[pos].contain(mask(key));
}
inline bool empty() const { return mx == -1; }
inline int min() const { return mn == inf ? -1 : mn; }
inline int max() const { return mx; }
// 以上(存在しない時は-1)
int find_next(int key) const {
if (key <= min()) return min();
if (max() < key) return -1;
int pos = key >> shift;
if (map.contain(pos) && mask(key) <= chd[pos].max()) {
return (pos << shift) + chd[pos].find_next(mask(key));
}
int nxt = map.find_next(pos + 1);
if (nxt == -1) return -1;
return (nxt << shift) + chd[nxt].min();
}
// 未満(存在しない時は-1)
int find_prev(int key) const {
if (max() < key) return max();
if (key <= min()) return -1;
int pos = key >> shift;
if (map.contain(pos) && chd[pos].min() < mask(key)) {
return (pos << shift) + chd[pos].find_prev(mask(key));
}
int nxt = map.find_prev(pos);
if (nxt == -1) return -1;
return (nxt << shift) + chd[nxt].max();
}
};
template <int LOG>
struct vEB_tree_node<LOG, typename std::enable_if<LOG == 1>::type> {
u64 map;
vEB_tree_node() : map(0) {}
inline void insert(int key) { map |= 1ULL << key; }
inline void erase(int key) { map &= ~(1ULL << key); }
inline bool contain(int key) const { return (map >> key) & 1; }
inline bool empty() const { return map == 0; }
inline int min() const { return ctz(map); }
inline int max() const { return clz(map); }
int find_next(int key) const { return ctz(map & ~((1ULL << key) - 1)); }
int find_prev(int key) const { return clz(map & ((1ULL << key) - 1)); }
};
} // namespace vEB_tree_impl
constexpr int N = 2e5 + 9;
constexpr int inf = 2e6;
int n, M, val[N], tot;
vi a[N];
IL constexpr LL sq (int x) {
return (LL)x * x;
}
vEB_tree_impl::vEB_tree_node<4> ds;
struct calculator {
int l, r;
LL s;
vi A, B;
void init (int p) {
int q = p ? p - 1 : n - 1;
l = sz(a[q]);
r = -1;
vector<pair<int, int>> C;
L (i, 0, sz(a[p]) - 1) {
C.eb(a[p][i], i + 1);
}
L (i, 0, sz(a[q]) - 1) {
C.eb(a[q][i], -i - 1);
}
sort(C.begin(), C.end());
A.resize(sz(a[p]));
B.resize(sz(a[q]));
val[tot] = 0;
ds.insert(tot++);
L (i, 0, sz(C) - 1) {
val[tot] = C[i].first;
if (C[i].second > 0) {
A[C[i].second - 1] = tot++;
} else {
B[-C[i].second - 1] = tot++;
}
}
val[tot] = inf;
ds.insert(tot++);
s = (LL)inf * inf;
}
void ins (int x) {
int a = ds.find_prev(x), b = ds.find_next(x);
s += sq(val[x] - val[a]) + sq(val[x] - val[b]) - sq(val[a] - val[b]);
ds.insert(x);
}
void era (int x) {
ds.erase(x);
int a = ds.find_prev(x), b = ds.find_next(x);
s += sq(val[a] - val[b]) - sq(val[x] - val[a]) - sq(val[x] - val[b]);
}
LL gt (int ql, int qr) {
while (l > ql) {
ins(B[--l]);
}
while (r < qr) {
ins(A[++r]);
}
while (l < ql) {
era(B[l++]);
}
while (r > qr) {
era(A[r--]);
}
return s;
}
} c[N];
vector<LL> f[N];
vi g[N];
void DP (int k, int l, int r, int L, int R) {
if (l > r || L > R) {
return;
}
int m = (l + r) / 2;
LL mn = 0;
int p = -1;
L (i, L, R) {
LL w = f[k ? k - 1 : n - 1][i] + c[k].gt(i, m - 1);
if (p == -1 || w < mn) {
mn = w;
p = i;
}
}
f[k][m] = mn;
g[k][m] = p;
DP(k, l, m - 1, L, p);
DP(k, m + 1, r, p, R);
}
struct inter {
int L, R;
inter (int a = 0, int b = 0) {
L = a, R = b;
}
};
LL ans;
void conq (vector<inter> q) {
if (q[0].L > q[0].R) {
return;
}
int m = (q[0].L + q[0].R) / 2;
L (i, q[1].L, q[1].R) {
f[1][i] = c[1].gt(m, i - 1);
}
L (i, 2, n - 1) {
DP(i, q[i].L, q[i].R, q[i - 1].L, q[i - 1].R);
}
LL mn = 0;
int p = -1;
L (i, q[n - 1].L, q[n - 1].R) {
LL w = f[n - 1][i] + c[0].gt(i, m - 1);
if (p == -1 || w < mn) {
mn = w;
p = i;
}
}
ans = min(ans, mn);
auto ql = q, qr = q;
R (i, n - 1, 1) {
ql[i].R = qr[i].L = p;
p = g[i][p];
}
ql[0].R = m - 1;
qr[0].L = m + 1;
conq(ql);
conq(qr);
}
int main () {
cin >> n;
L (i, 0, n - 1) {
int m;
cin >> m;
a[i].resize(m);
L (j, 0, m - 1) {
cin >> a[i][j];
}
}
vector<inter> init;
L (i, 0, n - 1) {
c[i].init(i);
f[i].resize(sz(a[i]));
g[i].resize(sz(a[i]));
init.eb(0, sz(a[i]) - 1);
}
ans = LONG_LONG_MAX;
conq(init);
cout << ans << '\n';
}
// I love WHQ!
详细
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 19976kb
input:
7 2 141209 1121811 2 812367 1802201 2 977174 168547 2 1687591 770753 2 383640 1117793 2 976813 1295653 2 1204905 1272531
output:
11670772336006
result:
ok single line: '11670772336006'
Test #2:
score: 10
Accepted
time: 0ms
memory: 19980kb
input:
2 3 747473 498147 966660 4 140021 1580273 1406494 1082158
output:
2048229359670
result:
ok single line: '2048229359670'
Test #3:
score: 10
Accepted
time: 3ms
memory: 19916kb
input:
3 2 1728062 1099010 2 681240 1097031 3 1641021 1511445 589879
output:
4172471577572
result:
ok single line: '4172471577572'
Test #4:
score: 10
Accepted
time: 2ms
memory: 19984kb
input:
5 16 584133 1584872 154106 1620031 591988 744576 1145492 27159 242511 670507 1070239 967255 904906 1001126 1473498 476319 6 854977 1522388 1715546 755137 1587176 1693529 10 1712058 1021608 56261 1457152 501427 1834297 1045836 1646715 1286280 1705780 13 1970970 641553 1429549 1002213 510656 1957451 1...
output:
1733588007714
result:
ok single line: '1733588007714'
Test #5:
score: 10
Accepted
time: 0ms
memory: 20212kb
input:
5 34 1566025 85940 278880 454649 787234 1305849 154207 1474698 1600192 503961 365771 1482441 1547432 161149 264902 261751 1808604 1742906 421948 1700417 1130148 1895614 1845604 1982079 1809962 570006 806643 1147674 642303 1639211 71572 504934 1645348 777213 12 891780 864141 142718 810549 1837977 156...
output:
1998774012376
result:
ok single line: '1998774012376'
Test #6:
score: 10
Accepted
time: 0ms
memory: 19992kb
input:
8 12 1661582 42963 825548 905766 1396233 1586762 1462654 1109305 494915 350916 1873040 393645 13 345398 1885409 1256560 1894290 1491080 1621530 227733 1736972 1628382 1484099 800971 57243 477341 12 188280 1756126 1032009 615335 993454 1177927 1940147 533378 483231 360286 2257 140152 12 1166895 98911...
output:
4213902956250
result:
ok single line: '4213902956250'
Test #7:
score: 10
Accepted
time: 4ms
memory: 20172kb
input:
2 53 302846 1295542 24845 1212574 1304172 104285 703874 84915 1712705 1244300 1414005 1987829 453192 1608635 1118210 1309012 1277168 507531 1409701 1910782 396566 1922014 606343 1790716 1330747 226808 1781210 1977352 1075232 1056760 882341 497105 1552080 1341875 607475 298838 1823003 970560 1613243 ...
output:
307847818150
result:
ok single line: '307847818150'
Test #8:
score: 10
Accepted
time: 0ms
memory: 19996kb
input:
5 19 219089 505437 1310185 184027 898555 1116029 87339 217421 1309381 519629 1288544 1712726 339398 1854776 86798 318778 1150968 142049 889486 19 1165430 1587268 19293 1800520 372004 508331 916039 98568 1733119 46813 734281 188087 1898878 1387285 1203403 1880278 985595 382635 1809272 20 1472954 1533...
output:
1692696172628
result:
ok single line: '1692696172628'
Test #9:
score: 10
Accepted
time: 0ms
memory: 22040kb
input:
6 21 357771 315599 1460430 818532 214122 1172906 1734280 1500944 1018238 1714578 1521590 1446805 1232828 1586122 1658707 1391658 1587342 123447 18944 222566 1208967 10 564921 713032 1585614 1192233 698056 1182537 1019254 360882 985272 202180 13 815939 1021021 1857909 1535469 415946 1834538 85776 173...
output:
2597658447248
result:
ok single line: '2597658447248'
Test #10:
score: 10
Accepted
time: 0ms
memory: 19876kb
input:
8 12 380229 1846517 1793452 533237 803179 1861650 1346185 1016991 1854367 185486 1269069 1523331 15 1404393 1476051 1296740 124511 1599551 597438 983996 1530258 1027553 206078 329015 485189 1899261 1724574 364569 9 400122 370232 1501910 662275 1393909 1996150 140566 1329516 500584 9 891866 416021 17...
output:
3875073703894
result:
ok single line: '3875073703894'
Subtask #2:
score: 20
Accepted
Dependency #1:
100%
Accepted
Test #11:
score: 20
Accepted
time: 0ms
memory: 20236kb
input:
147 2 1372901 772129 4 1020221 971692 1168518 159062 3 984910 1258846 1235276 3 878312 143829 1298333 3 1621632 1328072 1757948 2 1974623 996846 6 1868536 553403 1996068 1295727 653126 1805160 2 432938 1048701 3 917584 771455 856917 3 1907080 1449811 328103 2 236480 1908319 2 1049603 1624504 4 50589...
output:
211627731592048
result:
ok single line: '211627731592048'
Test #12:
score: 20
Accepted
time: 0ms
memory: 19968kb
input:
152 5 174207 387280 690833 15287 439714 5 1201407 681555 1745531 469616 1228449 6 1556243 63257 952534 1647801 318933 653183 6 111530 1644663 733744 909159 499759 632269 9 765943 1385423 1088518 452880 441111 1547494 141731 954414 231825 6 767182 1911649 213321 1316021 1833365 951382 5 141116 693885...
output:
133043790176918
result:
ok single line: '133043790176918'
Test #13:
score: 20
Accepted
time: 0ms
memory: 20168kb
input:
500 2 28558 973575 2 1327149 1966676 2 1171935 232590 2 1124942 1569805 2 1132550 481012 2 1046320 419786 2 170580 971835 2 1974155 1252285 2 1882588 1340878 2 1414318 244813 2 1678309 1687898 2 810989 522410 2 1351481 1145851 2 1222091 1312777 2 1405614 1951551 2 1412654 1305216 2 726188 975503 2 9...
output:
949657455192700
result:
ok single line: '949657455192700'
Test #14:
score: 20
Accepted
time: 4ms
memory: 19996kb
input:
13 26 183835 1891616 1615510 1115306 94917 1550834 1403382 961362 991619 78890 569339 1515129 1642042 1443476 1609830 1844840 1816400 79821 1761506 1958708 1718252 1056795 816456 443329 248678 1087100 29 910626 215950 202302 1896290 222131 1572381 300318 1562003 1371685 1910953 827189 1190876 114324...
output:
3045699033828
result:
ok single line: '3045699033828'
Test #15:
score: 20
Accepted
time: 0ms
memory: 20032kb
input:
12 35 1519590 1118678 348919 1562990 1635196 107142 354301 1211746 592044 1461695 1111253 1944129 585161 1019360 127379 78918 1516682 1397269 472897 425684 428563 1301155 753806 730032 257014 315928 158460 1339523 231995 52208 1058915 384596 1261092 145361 1977113 23 1996527 588975 1991450 333699 15...
output:
2921188180374
result:
ok single line: '2921188180374'
Test #16:
score: 20
Accepted
time: 3ms
memory: 19992kb
input:
8 106 619845 415875 1180231 865280 1261241 201769 1440032 17964 1760503 918240 1703582 299378 552068 120435 1978938 1812433 1269028 580880 776182 823782 1204815 8254 1269067 1101930 821568 294579 1990010 1674046 1401068 1043644 1021208 1572673 1875570 66848 1954973 1565086 1795614 226955 105912 5345...
output:
546063113910
result:
ok single line: '546063113910'
Test #17:
score: 20
Accepted
time: 4ms
memory: 19948kb
input:
6 67 1593561 1867013 1897744 400384 1379411 988245 332730 72836 1745322 1512852 1599136 871114 382156 830357 591119 602302 1559705 1381038 284137 1498930 1957808 997229 984856 778052 533770 49586 1442939 164977 825944 1274277 746673 1427605 1066662 477527 772149 622435 866958 1470924 1422824 469315 ...
output:
665979693344
result:
ok single line: '665979693344'
Test #18:
score: 20
Accepted
time: 2ms
memory: 22032kb
input:
4 49 405746 1310767 985218 1991780 372660 23694 1012019 265171 1430937 895711 817568 840481 1926131 888517 583746 715878 796716 390880 716208 892518 221955 656717 1580779 1821336 194784 147463 1273321 933532 1260914 830969 354223 1037231 1031226 1549253 985278 777463 1616733 505225 861272 1991357 86...
output:
483524689300
result:
ok single line: '483524689300'
Test #19:
score: 20
Accepted
time: 0ms
memory: 19904kb
input:
2 489 667060 1206168 830362 618705 1754699 805678 1628114 1294906 1181309 234274 511717 209261 1083043 1084337 278905 448634 1596547 296527 754468 12051 1292691 1727566 857327 111731 1496346 225644 1027512 617993 1982528 1011736 1691594 1827258 214842 1094832 1266439 536677 489047 908699 1674558 148...
output:
29590375960
result:
ok single line: '29590375960'
Test #20:
score: 20
Accepted
time: 0ms
memory: 20256kb
input:
101 500 680975 1073719 1260045 727434 1969443 881554 887155 265680 743000 501780 832393 491668 1461183 259277 1462302 567298 661416 1242399 528598 1942294 1357628 1143582 575136 1349443 685466 697061 990721 861526 912438 253251 1147533 1476595 759162 275759 1917376 1539539 1300395 427565 696869 7447...
output:
97198282311676
result:
ok single line: '97198282311676'
Subtask #3:
score: 0
Time Limit Exceeded
Dependency #2:
100%
Accepted
Test #21:
score: 30
Accepted
time: 34ms
memory: 23144kb
input:
8939 4 440419 1525753 1278622 1808699 4 1240278 1221809 1631010 1039993 3 257623 295999 245115 5 1712418 475483 1945140 1186946 1128196 9 286697 681022 1290690 955835 1106275 356865 1088437 1708186 1133709 4 964107 755534 389869 1584440 9 956222 586056 532557 885142 1447326 186875 1750458 479704 163...
output:
8850587435529910
result:
ok single line: '8850587435529910'
Test #22:
score: 30
Accepted
time: 25ms
memory: 25244kb
input:
18597 2 657704 1413374 2 1470465 331541 3 326590 1997246 1960707 2 1767851 1089614 3 1065552 1421319 1895675 2 436303 976454 2 241011 190085 2 129761 617449 2 843279 1524283 3 1573915 923937 519877 3 916852 1511407 1390655 2 1970044 565080 2 1692696 178911 2 1982339 609105 2 926810 383341 3 42575 10...
output:
29867464659234470
result:
ok single line: '29867464659234470'
Test #23:
score: 30
Accepted
time: 26ms
memory: 26636kb
input:
24853 2 1706709 956169 2 1425751 361083 2 926805 765711 2 1530127 1143833 2 1019912 141132 2 1157205 1656940 2 1327168 80870 2 673072 800659 2 13998 1327785 2 396492 265664 2 1483276 946587 2 1633689 977951 2 753205 1637465 2 317375 1286056 2 1571045 1739635 2 1169182 1353681 2 1996995 103875 2 1303...
output:
46395909376832160
result:
ok single line: '46395909376832160'
Test #24:
score: 30
Accepted
time: 120ms
memory: 21900kb
input:
3 16404 1269204 29553 1942477 419399 1613856 1268725 539416 1311717 1041552 851511 3374 902734 1668047 434566 403074 911653 1325267 283101 1504205 212082 248200 1705529 928395 442312 1064689 1636750 1265349 221137 1228821 1158221 989913 1676502 662119 66991 775131 337073 1890426 1080858 902189 17499...
output:
1449608404
result:
ok single line: '1449608404'
Test #25:
score: 30
Accepted
time: 212ms
memory: 21656kb
input:
15 3281 1987794 62602 340090 635485 1451574 381758 579900 706541 1952142 1199391 25796 1491568 1459151 1747299 456385 921356 864811 1667206 116637 1124311 627090 855176 1565591 157995 1086712 1191042 162361 1719350 1967958 675756 647058 892332 1288872 1903979 995861 1794983 500431 834137 486579 1472...
output:
35971489098
result:
ok single line: '35971489098'
Test #26:
score: 30
Accepted
time: 219ms
memory: 23640kb
input:
20 2504 1329147 791952 527553 449667 1987072 439925 396898 872177 770334 378235 1228775 822114 1120110 1386390 1778632 151775 559887 212887 213707 1752512 1098613 871485 221560 1193055 703404 1031207 10052 403326 611071 601734 128327 521003 410319 1435871 1698822 844346 46540 251526 1622714 1088448 ...
output:
62964957526
result:
ok single line: '62964957526'
Test #27:
score: 30
Accepted
time: 184ms
memory: 21640kb
input:
18 1253 1017692 514310 1062669 740703 712203 1072102 629689 798920 1775933 1629927 1897816 1634190 1741023 916346 1909811 1958451 361438 311569 1735197 268722 764513 933324 362793 1535228 805210 885878 526814 696879 854201 1223643 570948 1915047 1540545 989525 1251484 1289415 591192 1072798 1383650 ...
output:
78461851184
result:
ok single line: '78461851184'
Test #28:
score: 30
Accepted
time: 199ms
memory: 21568kb
input:
19 1842 1965361 1597208 1657471 1054534 1357195 581507 1025511 1374687 1091889 392889 1687488 252864 1403160 99808 850576 1915518 350501 1142227 693119 544656 574488 1571734 875001 1849905 1166103 1036518 1138114 1495588 225433 589646 105695 1346730 1154176 38084 1558607 1474598 374070 490966 138649...
output:
57272843736
result:
ok single line: '57272843736'
Test #29:
score: 0
Time Limit Exceeded
input:
12501 25000 986657 210610 179407 1189889 1649466 126259 1011320 15232 1846237 1736017 1482170 1369531 278012 745437 1291403 1788129 743220 120788 136313 1421713 1046057 821414 1851414 1532097 70078 1307799 245604 125313 19609 1597628 814750 1292327 1418495 299186 1951116 618786 866326 452653 1451471...
output:
result:
Subtask #4:
score: 0
Skipped
Dependency #3:
0%