# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
1034855 |
2024-07-25T20:17:35 Z |
xnqs |
Meteors (POI11_met) |
C++17 |
|
3874 ms |
46272 KB |
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstring>
struct Operation {
int64_t l, r, amt;
Operation():
l(0), r(0), amt(0) {}
Operation(int64_t l, int64_t r, int64_t amt):
l(l), r(r), amt(amt) {}
};
struct ParallelBSQuery {
int64_t color;
int64_t l, r, m;
ParallelBSQuery():
color(0), l(0), r(0), m(0) {}
ParallelBSQuery(int64_t color, int64_t l, int64_t r):
color(color), l(l), r(r), m((l+r)>>1) {}
};
int64_t x, q, ops;
int64_t color[300005];
int64_t target[300005];
int64_t ans[300005];
int64_t tree[1200005];
int64_t lazy[1200005];
std::vector<Operation> operations;
std::vector<ParallelBSQuery> queries;
std::vector<int64_t> owned_by[300005];
void push(int64_t node, int64_t l, int64_t r) {
tree[node] += lazy[node];
if (l!=r) {
lazy[node<<1] += lazy[node];
lazy[node<<1|1] += lazy[node];
}
lazy[node] = 0;
}
void update(int64_t node, int64_t l, int64_t r, int64_t st, int64_t fi, int64_t val) {
push(node,l,r);
if (l>fi||r<st) {
return;
}
if (st<=l&&r<=fi) {
lazy[node] += val;
push(node,l,r);
return;
}
int64_t m = (l+r)>>1;
update(node<<1,l,m,st,fi,val);
update(node<<1|1,m+1,r,st,fi,val);
tree[node] = tree[node<<1] + tree[node<<1|1];
}
int64_t query(int64_t node, int64_t l, int64_t r, int64_t st, int64_t fi) {
push(node,l,r);
if (l>fi||r<st) {
return 0;
}
if (st<=l&&r<=fi) {
return tree[node];
}
int64_t m = (l+r)>>1;
return query(node<<1,l,m,st,fi) + query(node<<1|1,m+1,r,st,fi);
}
int64_t get_sum(int64_t color) {
int64_t ret = 0;
for (const auto& i : owned_by[color]) {
ret += query(1,1,x,i,i);
}
return ret;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
std::cin >> q >> x;
for (int64_t i = 1; i <= x; i++) {
std::cin >> color[i];
owned_by[color[i]].emplace_back(i);
}
for (int64_t i = 1; i <= q; i++) {
std::cin >> target[i];
}
std::cin >> ops;
operations.reserve(ops);
for (int64_t i = 0, l, r, amt; i < ops; i++) {
std::cin >> l >> r >> amt;
operations.emplace_back(l,r,amt);
}
for (int64_t i = 0; i < q; i++) {
ans[i+1] = -1;
queries.emplace_back(i+1,0,ops-1);
}
for (int64_t iterations = 0; iterations < 19; iterations++) {
memset(tree,0,sizeof(tree));
memset(lazy,0,sizeof(lazy));
std::sort(queries.begin(),queries.end(),[](const ParallelBSQuery& a, const ParallelBSQuery& b) {
return a.m < b.m;
});
int64_t scanline = 0;
for (auto& [color, l, r, m] : queries) {
if (l>r) {
continue;
}
while (scanline<=m) {
auto [i, j, amt] = operations[scanline];
if (i>j) {
update(1,1,x,1,j,amt);
update(1,1,x,i,x,amt);
}
else {
update(1,1,x,i,j,amt);
}
++scanline;
}
int64_t cand = get_sum(color);
if (cand>=target[color]) {
ans[color] = m;
r = m-1;
}
else {
l = m+1;
}
m = (l+r)>>1;
}
}
for (int64_t i = 1; i <= q; i++) {
if (ans[i]==-1) std::cout << "NIE\n";
else std::cout << ans[i]+1 << "\n";
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
21 ms |
26200 KB |
Output is correct |
2 |
Correct |
22 ms |
26200 KB |
Output is correct |
3 |
Correct |
21 ms |
26204 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
26400 KB |
Output is correct |
2 |
Correct |
21 ms |
26200 KB |
Output is correct |
3 |
Correct |
23 ms |
26200 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
353 ms |
28632 KB |
Output is correct |
2 |
Correct |
421 ms |
30148 KB |
Output is correct |
3 |
Correct |
391 ms |
29388 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
387 ms |
29136 KB |
Output is correct |
2 |
Correct |
393 ms |
29136 KB |
Output is correct |
3 |
Correct |
444 ms |
29896 KB |
Output is correct |
4 |
Correct |
120 ms |
28368 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
230 ms |
28844 KB |
Output is correct |
2 |
Correct |
356 ms |
29952 KB |
Output is correct |
3 |
Correct |
82 ms |
27484 KB |
Output is correct |
4 |
Correct |
398 ms |
29644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
204 ms |
28372 KB |
Output is correct |
2 |
Correct |
397 ms |
29132 KB |
Output is correct |
3 |
Correct |
354 ms |
28504 KB |
Output is correct |
4 |
Correct |
409 ms |
30156 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3788 ms |
46272 KB |
Output is correct |
2 |
Incorrect |
2628 ms |
37980 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3874 ms |
45464 KB |
Output is correct |
2 |
Incorrect |
1417 ms |
38096 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |