QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#870071 | #9686. 士兵 | hhoppitree | 0 | 130ms | 12980kb | C++17 | 2.9kb | 2025-01-25 14:41:27 | 2025-01-25 14:41:36 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const long long INF = 1e18;
int n, m;
int a[N], b[N];
long long mx[N * 4], lz[N * 4], rm[N * 4];
vector<int> lsh;
void build(int k, int l, int r) {
mx[k] = -INF;
lz[k] = 0;
rm[k] = lsh[r - 1];
if (l == r) return;
int mid = (l + r) / 2;
build(k * 2, l, mid);
build(k * 2 + 1, mid + 1, r);
}
void pushdown(int k) {
if (lz[k]) {
mx[k * 2] += lz[k];
mx[k * 2 + 1] += lz[k];
lz[k * 2] += lz[k];
lz[k * 2 + 1] += lz[k];
lz[k] = 0;
}
}
long long query1(int k, int l, int r, int x, int y, long long cur = -INF) {
if (x > r || y < l || mx[k] - 2LL * (y - rm[k]) * m <= cur) return -INF;
if (l == r) return mx[k] - 1LL * (y - rm[k]) * m;
pushdown(k);
int mid = (l + r) / 2;
cur = max(cur, query1(k * 2, l, mid, x, y, cur));
cur = max(cur, query1(k * 2 + 1, mid + 1, r, x, y, cur));
return cur;
}
long long query2(int k, int l, int r, int x) {
if (l > x) return -INF;
if (r <= x) return mx[k];
pushdown(k);
int mid = (l + r) / 2;
return max(query2(k * 2, l, mid, x), query2(k * 2 + 1, mid + 1, r, x));
}
void modify(int k, int l, int r, int x, long long y) {
if (l == r) {
mx[k] = max(mx[k], y);
return;
}
pushdown(k);
int mid = (l + r) / 2;
if (x <= mid) modify(k * 2, l, mid, x, y);
else modify(k * 2 + 1, mid + 1, r, x, y);
mx[k] = max(mx[k * 2], mx[k * 2 + 1]);
}
void add(int k, int l, int r, int x, int y) {
if (r < x) return;
if (l >= x) {
mx[k] += y;
lz[k] += y;
return;
}
pushdown(k);
int mid = (l + r) / 2;
add(k * 2, l, mid, x, y);
add(k * 2 + 1, mid + 1, r, x, y);
mx[k] = max(mx[k * 2], mx[k * 2 + 1]);
}
int getId(int x) {
return lower_bound(lsh.begin(), lsh.end(), x) - lsh.begin() + 1;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d %d", &n, &m);
lsh.clear();
for (int i = 1; i <= n; ++i) {
scanf("%d %d", &a[i], &b[i]);
if (b[i] > 0) lsh.push_back(a[i]);
else lsh.push_back(a[i] + 1);
}
sort(lsh.begin(), lsh.end());
lsh.erase(unique(lsh.begin(), lsh.end()), lsh.end());
build(1, 1, lsh.size());
modify(1, 1, lsh.size(), getId(0), 0);
for (int i = 1; i <= n; ++i) {
if (b[i] > 0) {
modify(1, 1, lsh.size(), getId(a[i]), query1(1, 1, lsh.size(), getId(a[i]), a[i]));
} else {
modify(1, 1, lsh.size(), getId(a[i] + 1), query2(1, 1, lsh.size(), getId(a[i]) - 1));
}
add(1, 1, lsh.size(), getId(a[i]), b[i]);
}
printf("%lld\n", mx[1]);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 0
Runtime Error
input:
12 400000 215331 32634593 161413124 11430130 630188586 215159059 12789246 181156889 228549524 981499941 223418810 352275618 169560913 44477842 463549487 811410089 903359412 824711516 611158435 295107834 85539182 327533322 109743342 641057838 88328676 920713758 477897249 720713041 347272545 372388659...
output:
result:
Subtask #2:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 6ms
memory: 8088kb
input:
6 4000 55 438 -1672 4920 -694 9 -4515 2892 4721 4948 4935 3944 677 2915 -652 890 893 3761 1477 143 4944 3967 -2370 2829 67 2370 1345 3892 3370 4708 -3461 834 4318 2277 -4390 192 -209 3080 2003 3538 3350 1067 -4779 1317 1962 3221 -4535 3009 -3801 4407 1446 2697 4623 2842 3270 1694 2843 1428 -4000 657...
output:
34844438 2052255 760991 159870 96516 148797
result:
wrong answer 1st words differ - expected: '277072', found: '34844438'
Subtask #3:
score: 0
Wrong Answer
Test #11:
score: 0
Wrong Answer
time: 4ms
memory: 8064kb
input:
6 4000 40 845657770 -724310339 314790762 -566202228 187061691 -849927809 881904926 159041058 958604341 -584625938 732309461 -496364578 102825909 -280420619 984389141 -643824457 464469583 398420805 531965757 -421979933 986707233 -101542333 589119003 427359050 856508269 493450680 276095634 -802021302 ...
output:
13195898538311 576883673550 116932205870 76809396582 10295513965 41383192633
result:
wrong answer 1st words differ - expected: '68371553898', found: '13195898538311'
Subtask #4:
score: 0
Wrong Answer
Test #16:
score: 0
Wrong Answer
time: 130ms
memory: 12980kb
input:
10 80000 278 989724232 684111881 387651979 995302974 935116319 -763307536 357312084 -992764231 691346506 179082856 673738821 -447838734 715542279 963718765 152553078 -96440380 619692385 18180027 538482960 873901814 622934033 -173705491 873338483 177298769 503597801 185822983 282786465 165743421 7701...
output:
1238952128086633 50512478290002 26564748134745 7170489696247 2290620718368 1104716066588 284871226276 100608317299 34998588609 37760283634
result:
wrong answer 1st words differ - expected: '346908020404', found: '1238952128086633'
Subtask #5:
score: 0
Runtime Error
Test #21:
score: 0
Runtime Error
input:
11 160000 250 466377051 -617201470 709746153 18809363 499278797 -710523377 15106343 357127850 957417981 815655483 548989540 857011432 342064971 -461130568 679069515 592000112 590334260 324962484 551405428 -659075943 157123277 -193688122 387315357 512108123 852827874 -346582430 412123423 -656604422 3...
output:
result:
Subtask #6:
score: 0
Runtime Error
Test #26:
score: 0
Runtime Error
input:
12 400000 317 193208489 -270750940 582242598 -29443406 314213399 -242002909 311093779 -328422545 632402493 213048254 811395226 940669675 898004477 320489888 768923060 772646467 409062473 740531861 746345655 -160152674 198610379 579865887 656915491 833962170 146211597 496968125 263883352 836697145 28...