| Task: | Lisäykset |
| Sender: | jhuun |
| Submission time: | 2025-11-29 12:31:00 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 20 |
| #2 | ACCEPTED | 33 |
| #3 | ACCEPTED | 47 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.03 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.03 s | 1, 2, 3 | details |
| #3 | ACCEPTED | 0.03 s | 1, 3 | details |
| #4 | ACCEPTED | 0.03 s | 1, 3 | details |
| #5 | ACCEPTED | 0.03 s | 1, 3 | details |
| #6 | ACCEPTED | 0.08 s | 2, 3 | details |
| #7 | ACCEPTED | 0.08 s | 3 | details |
| #8 | ACCEPTED | 0.09 s | 3 | details |
| #9 | ACCEPTED | 0.08 s | 3 | details |
| #10 | ACCEPTED | 0.25 s | 3 | details |
| #11 | ACCEPTED | 0.26 s | 3 | details |
Code
#include <bits/stdc++.h>
constexpr auto MAXN = 1000000;
std::vector<int64_t> T(4 * MAXN);
void add(int v, int tl, int tr, int l, int r) {
if (l > r) {
return;
}
if (l == tl && r == tr) {
++T[v];
} else {
const auto tm = (tl + tr) / 2;
add(v * 2, tl, tm, l, std::min(r, tm));
add(v * 2 + 1, tm + 1, tr, std::max(l, tm + 1), r);
}
}
int64_t query(int v, int tl, int tr, int pos) {
if (tl == tr) {
return T[v];
}
const auto tm = (tl + tr) / 2;
return T[v] + (pos <= tm ? query(v * 2, tl, tm, pos) : query(v * 2 + 1, tm + 1, tr, pos));
}
void add(int r) {
add(1, 0, MAXN, 0, r);
}
int64_t query(int pos) {
return query(1, 0, MAXN, pos);
}
int64_t value(int64_t v) {
return v + query(v);
}
struct R {
int64_t v;
int64_t c;
int64_t b;
bool operator<(const R& other) const {
return b + c < other.b + other.c;
}
};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
int n, m;
std::cin >> n >> m;
std::set<R> RS = [n]() {
std::set<R> RS;
std::vector<R> tmp;
for (auto i = 0; i < n; ++i) {
int64_t x;
std::cin >> x;
if (tmp.empty()) {
tmp.push_back({x, 1, 0});
}
else if (auto& r = tmp.back(); r.v == x) {
++r.c;
}
else {
tmp.push_back({x, 1, r.b + r.c});
}
}
for (auto&& r : tmp) {
RS.insert(std::move(r));
}
return RS;
}();
for (auto i = 0; i < m; ++i) {
int64_t k;
std::cin >> k;
auto ri = RS.lower_bound({0, k, 0});
auto r = *ri;
const auto v = value(r.v);
const auto mv = k - r.b;
const auto st = r.c - mv;
const auto rb = r.b;
auto rpi = ri != RS.begin() ? std::prev(ri) : RS.end();
auto rni = std::next(ri);
RS.erase(ri);
if (st > 0 && rpi != RS.end() && v - 1 == value(rpi->v)) {
auto rp = *rpi;
rp.c += st;
r.c -= st;
r.b += st;
RS.erase(rpi);
RS.insert(rp);
}
if (rni != RS.end() && v + 1 == value(rni->v)) {
auto rn = *rni;
r.c -= mv;
rn.c += mv;
rn.b -= mv;
RS.erase(rni);
RS.insert(rn);
} else {
auto rn = R{r.v + 1, mv, rb + st};
r.c -= mv;
RS.insert(rn);
}
if (r.c > 0) {
RS.insert(r);
}
add(r.v - 1);
}
for (const auto& r : RS) {
const auto vl = value(r.v);
for (auto i = 0; i < r.c; ++i) {
std::cout << vl << ' ';
}
}
std::cout << '\n';
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 1 1000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
| correct output |
|---|
| 1000 |
| user output |
|---|
| 1000 |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 511 511 511 511 511 511 511 51... |
| user output |
|---|
| 511 511 511 511 511 511 511 51... |
Test 3
Group: 1, 3
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 495 495 495 495 495 495 495 49... |
| user output |
|---|
| 495 495 495 495 495 495 495 49... |
Test 4
Group: 1, 3
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 ... |
| correct output |
|---|
| 562 562 562 562 562 562 562 56... |
| user output |
|---|
| 562 562 562 562 562 562 562 56... |
Test 5
Group: 1, 3
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 0 1 3 4 6 9 9 9 10 11 11 11 11... |
| correct output |
|---|
| 997 997 997 997 997 998 998 99... |
| user output |
|---|
| 997 997 997 997 997 998 998 99... |
Test 6
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 50033 50033 50033 50033 50033 ... |
| user output |
|---|
| 50033 50033 50033 50033 50033 ... |
Test 7
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 49996 49996 49996 49996 49996 ... |
| user output |
|---|
| 49996 49996 49996 49996 49996 ... |
Test 8
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 50057 50057 50057 50057 50057 ... |
| user output |
|---|
| 50057 50057 50057 50057 50057 ... |
Test 9
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
| correct output |
|---|
| 50536 50536 50536 50536 50536 ... |
| user output |
|---|
| 50536 50536 50536 50536 50536 ... |
Test 10
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 0 4 7 29 33 44 52 75 77 79 82 ... |
| correct output |
|---|
| 100000 100001 100003 100023 10... |
| user output |
|---|
| 100000 100001 100003 100023 10... |
Test 11
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 1 12 14 16 49 59 59 63 68 73 8... |
| correct output |
|---|
| 100001 100010 100012 100014 10... |
| user output |
|---|
| 100001 100010 100012 100014 10... |
