QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#446136 | #8301. Hold the Line | lym | TL | 2427ms | 5800kb | C++20 | 1.7kb | 2024-06-16 22:28:44 | 2024-06-16 22:28:45 |
Judging History
answer
#include<bits/stdc++.h>
using i64 = long long;
const int inf = 1e9 + 10;
struct Block {
int n, b;
std::vector<int> blo, a;
std::vector<std::set<int> > v;
std::vector<std::set<int> > st;
void init(int n) {
this -> n = n;
this -> b = (int) std::pow(n, 0.7);
blo.assign(n + 1, 0);
v.assign(n + 1, {});
a.assign(n + 1, 0);
st.assign(n + 1, {});
for (int i = 1; i <= n; i ++) {
blo[i] = (i - 1) / b + 1;
}
}
void add(int x, int c) {
int p = blo[x];
v[p].insert(c);
a[x] = c;
st[p].insert(x);
}
int query(int l, int r, int c) {
int res = inf, p = blo[l], q = blo[r];
auto L = st[p].lower_bound(l);
while (L != st[p].end() && *L <= r) {
res = std::min(res, std::abs(a[*L] - c));
L = next(L);
}
if (p == q) return res;
auto R = st[q].begin();
while (R != st[q].end() && *R <= r) {
res = std::min(res, std::abs(a[*R] - c));
R = next(R);
}
for (int i = p + 1; i < q; i ++) {
auto it = v[i].lower_bound(c);
if (it != v[i].end()) {
res = std::min(res, std::abs(*it - c));
}
if (it != v[i].begin()) {
it = prev(it);
res = std::min(res, std::abs(*it - c));
}
}
return res;
}
};
void solve() {
int n, m;
std::cin >> n >> m;
Block t;
t.init(n);
while (m --) {
int op;
std::cin >> op;
if ( op & 1) {
int l, r, v;
std::cin >> l >> r >> v;
int res = t.query(l, r, v);
if (res == inf) {
res = -1;
}
std::cout << res << '\n';
} else {
int x, v;
std::cin >> x >> v;
t.add(x, v);
}
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
std::cin >> t;
while (t --) {
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3784kb
input:
1 3 5 1 1 3 2 0 1 1 0 3 3 1 1 2 2 1 2 3 2
output:
-1 1 1
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 318ms
memory: 3868kb
input:
3000 100 200 0 59 64091111 1 10 94 45205032 0 41 67249140 1 15 93 79570187 0 51 83215051 1 3 22 20062363 0 21 5188814 1 43 94 79642299 0 73 39313603 1 43 67 17001771 0 65 10784990 1 51 69 73368509 0 42 57377517 1 36 49 17483147 0 40 67280095 1 3 41 25139505 0 56 22833553 1 26 65 15640242 0 22 189761...
output:
18886079 12321047 -1 3572752 47089340 9277398 39894370 19950691 4855252 2221206 1596905 -1 3120922 34260194 3353597 -1 2499997 -1 15114024 1193064 49448136 734969 3981124 4159424 5836824 61155540 5163746 -1 283130 3982548 -1 -1 -1 9647216 2356693 8711627 379947 70230536 2637615 7856589 153976 148089...
result:
ok 700000 lines
Test #3:
score: 0
Accepted
time: 578ms
memory: 4088kb
input:
300 1000 2000 0 421 19938 1 153 254 35195 0 567 74665 1 88 371 61709 0 689 57559 1 39 744 67718 0 770 25816 1 576 955 75098 0 215 17619 1 133 133 29547 0 207 25038 1 929 965 45024 0 820 40726 1 245 505 82535 0 52 99669 1 631 819 77027 0 436 69966 1 102 243 65413 0 878 73531 1 331 759 23736 0 698 594...
output:
-1 -1 6947 17539 -1 -1 62597 19468 40375 3798 45299 -1 -1 11815 -1 -1 -1 6706 -1 -1 -1 9628 1883 -1 1822 -1 972 978 818 -1 3362 1758 53092 -1 712 -1 16697 -1 -1 1592 11462 -1 24068 12896 335 964 2836 29744 501 -1 -1 2298 1859 -1 6311 10290 2543 1589 838 920 7210 719 631 2781 -1 59401 2809 77412 1149...
result:
ok 700000 lines
Test #4:
score: 0
Accepted
time: 2427ms
memory: 5800kb
input:
30 10000 20000 0 6444 22597278 1 940 8167 40648977 0 630 71321002 1 4054 4055 30762754 0 303 59383865 1 3410 3454 1633609 0 3376 42435219 1 6856 7397 92892411 0 1534 14886520 1 474 1932 21770410 0 9387 10819286 1 1640 1726 34316178 0 7331 75627104 1 8763 8764 83586695 0 3923 78696653 1 5016 5016 923...
output:
18051699 -1 -1 -1 6883890 -1 -1 -1 44912717 2247991 -1 5148557 -1 4713193 6643123 2730913 -1 6589982 -1 -1 -1 -1 -1 3691582 -1 1774051 -1 41333276 -1 1422761 -1 -1 -1 -1 895071 -1 692358 -1 2207326 21917947 3850486 -1 53145894 -1 2896385 45348895 3875216 -1 2503573 514164 -1 -1 -1 10502418 -1 458238...
result:
ok 700000 lines
Test #5:
score: -100
Time Limit Exceeded
input:
3 100000 200000 0 77354 7 1 24769 44491 1 0 75190 6 1 3816 98172 1 0 45000 4 1 54504 97112 6 0 27855 3 1 53289 54534 9 0 87688 1 1 13220 13577 1 0 31245 7 1 4547 4547 3 0 43311 1 1 429 429 6 0 30798 2 1 28708 84952 4 0 99958 4 1 22719 22734 6 0 46564 3 1 1612 1664 7 0 95692 9 1 77806 93572 9 0 91654...
output:
-1 5 0 -1 -1 -1 -1 0 -1 -1 8 1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 2 -1 -1 -1 -1 -1 3 2 -1 -1 -1 -1 -1 -1 -1 1 -1 1 0 -1 2 0 2 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 6 -1 2 0 -1 5 -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 1 -1 -1 0 0 -1 4 8 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 -1 -1...