QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#18822 | #1877. Matryoshka Dolls | Martin_MHT | TL | 18ms | 14340kb | C++14 | 2.0kb | 2022-01-27 13:58:42 | 2022-05-06 02:45:43 |
Judging History
answer
#include <set>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iterator>
#include <algorithm>
#define fo(i, a, b) for(int i = (a); i <= (b); ++i)
#define fd(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
using ll = long long;
inline void read(int &x) { //ll, ne
x = 0; char ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
}
// modui
constexpr int N = 5e5;
struct Q {
int l, r, id;
}q[N + 5];
struct P {
int val, pos;
inline bool operator<(const P &o) const {
return val < o.val;
}
};
set<P> s;
set<P>::iterator it1, it2, it3;
ll cur, ans[N + 5];
int n, m, a[N + 5], bl[N + 5];
inline bool cmp(Q x, Q y) {
if(bl[x.l] < bl[y.l]) return 1;
else return bl[x.l] == bl[y.l] && (bl[x.l] & 1 ? (x.r < y.r) : (x.r > y.r));
}
inline void inc(int p) {
if(!s.empty()) {
it1 = s.upper_bound({a[p], p});
if(it1 == s.end())
--it1, cur += abs(p - it1 -> pos);
else if(it1 == s.begin()) {
cur += abs(p - it1 -> pos);
} else {
it2 = it1--;
cur += abs(p - it2 -> pos) + abs(p - it1 -> pos) - abs(it2 -> pos - it1 -> pos);
}
}
s.insert({a[p], p});
}
inline void dec(int p) {
it3 = it2 = it1 = s.lower_bound({a[p], p});
if(s.size() > 1) {
bool f1 = it1 != s.begin(), f2 = it2 != --s.end();
if(f1) --it1, cur -= abs(p - it1 -> pos);
if(f2) ++it2, cur -= abs(p - it2 -> pos);
if(f1 && f2) cur += abs(it2 -> pos - it1 -> pos);
}
s.erase(it3);
}
int main() {
read(n), read(m);
const int B = sqrt(n) + 1;
fo(i, 1, n) read(a[i]), bl[i] = (i - 1) / B + 1;
fo(i, 1, m) read(q[i].l), read(q[i].r), q[i].id = i;
sort(q + 1, q + m + 1, cmp);
int l = 1, r = 0;
fo(i, 1, m) {
while(r < q[i].r) inc(++r);
while(r > q[i].r) dec(r--);
while(l > q[i].l) inc(--l);
while(l < q[i].l) dec(l++);
ans[q[i].id] = cur;
}
fo(i, 1, m) printf("%lld\n", ans[i]);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 4ms
memory: 9332kb
input:
5 5 1 5 2 4 3 1 5 1 4 1 3 1 2 1 1
output:
7 5 3 1 0
result:
ok 5 number(s): "7 5 3 1 0"
Test #2:
score: 0
Accepted
time: 4ms
memory: 9164kb
input:
1 1 1 1 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 18ms
memory: 14340kb
input:
100000 1 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 ...
output:
4999950000
result:
ok 1 number(s): "4999950000"
Test #4:
score: 0
Accepted
time: 1ms
memory: 9264kb
input:
20 1 12 8 13 10 18 14 1 19 5 16 15 9 17 20 6 2 11 4 3 7 9 18
output:
36
result:
ok 1 number(s): "36"
Test #5:
score: 0
Accepted
time: 5ms
memory: 9168kb
input:
20 10 5 16 11 7 19 8 12 13 17 18 6 1 14 3 4 2 15 20 10 9 7 11 7 13 7 17 11 15 1 7 4 6 1 5 6 14 3 5 9 9
output:
7 16 34 9 20 3 8 22 3 0
result:
ok 10 numbers
Test #6:
score: 0
Accepted
time: 4ms
memory: 9152kb
input:
20 50 7 3 13 8 9 18 1 15 12 10 20 11 17 16 2 19 5 4 6 14 3 6 5 15 11 20 10 18 9 20 3 17 13 20 16 17 3 20 4 17 15 18 5 19 3 14 8 20 2 20 1 4 15 19 16 20 5 13 14 17 4 10 6 16 8 16 1 12 4 9 11 15 4 20 8 11 3 16 7 7 3 11 3 7 4 4 5 12 6 20 3 14 6 19 6 19 2 14 2 12 5 6 4 6 8 15 10 19 4 14 1 16 1 20 2 13 3...
output:
6 48 36 24 46 74 17 1 104 64 5 68 44 58 130 5 9 8 30 7 13 48 26 38 11 8 92 5 70 0 28 9 0 20 80 44 58 58 48 36 1 2 20 28 34 76 136 46 1 28
result:
ok 50 numbers
Test #7:
score: 0
Accepted
time: 1ms
memory: 9336kb
input:
20 100 4 13 20 8 1 18 19 9 17 5 12 7 11 16 6 3 15 10 14 2 4 19 1 6 6 19 4 6 2 17 1 5 11 13 1 15 9 17 9 15 7 20 3 19 10 19 1 10 11 17 10 17 2 18 17 20 12 19 1 3 5 17 7 13 6 18 10 20 1 6 2 17 5 9 4 13 11 13 2 20 7 13 12 17 5 19 17 20 11 19 3 15 3 5 5 11 1 17 10 15 16 20 1 6 2 19 4 12 5 18 9 17 3 6 12 ...
output:
76 16 57 3 84 10 3 74 31 19 59 80 40 44 16 26 94 5 26 2 54 17 53 44 16 84 8 32 3 106 17 12 68 5 30 48 2 16 102 14 9 16 98 28 64 31 6 1 54 20 26 31 74 5 26 3 66 32 36 59 1 26 6 33 35 5 57 1 1 57 24 6 10 68 36 41 34 0 12 8 11 2 62 12 41 10 5 25 0 60 0 44 25 12 8 2 16 36 8 1
result:
ok 100 numbers
Test #8:
score: 0
Accepted
time: 0ms
memory: 9172kb
input:
20 228 7 3 17 10 16 11 19 5 1 13 20 18 14 2 8 4 6 9 12 15 7 20 2 20 10 13 14 19 1 9 12 20 17 19 9 20 10 12 14 17 4 15 7 16 5 12 13 16 16 18 7 18 1 11 7 17 2 20 6 8 9 17 12 18 7 18 3 4 7 13 1 4 6 12 6 10 3 17 3 4 5 14 7 13 9 20 6 20 2 4 14 17 17 20 1 7 19 20 4 20 14 15 12 16 4 6 4 15 10 11 2 16 2 20 ...
output:
66 136 5 9 32 30 2 42 3 5 62 40 28 5 2 50 44 44 136 3 20 14 50 1 16 5 18 10 74 1 44 16 42 90 3 5 3 13 1 108 1 6 3 62 1 94 136 3 14 42 3 80 26 6 54 7 26 26 31 1 74 38 15 14 52 26 14 6 4 7 3 2 70 13 2 44 6 76 26 90 1 66 108 0 28 16 132 18 7 3 14 48 7 15 1 8 9 22 9 18 36 5 70 44 42 3 1 42 0 3 3 8 3 62 ...
result:
ok 228 numbers
Test #9:
score: 0
Accepted
time: 3ms
memory: 9168kb
input:
20 322 3 11 4 1 9 19 7 12 5 17 8 15 10 18 13 2 20 16 14 6 8 14 6 6 3 17 3 16 9 18 7 17 12 13 4 14 12 18 6 13 8 9 3 17 7 20 12 16 10 15 12 16 12 14 16 19 6 7 18 20 6 16 7 14 5 19 12 13 3 14 10 15 11 18 12 20 8 9 1 13 17 18 1 18 4 19 4 9 5 19 4 5 1 2 10 17 11 19 7 14 15 20 20 20 4 7 12 15 7 17 3 13 7 ...
output:
19 0 91 80 37 39 1 48 21 23 1 91 81 10 13 10 3 5 1 2 44 23 87 1 50 13 25 37 1 58 1 119 99 14 87 1 1 21 33 23 15 0 6 7 39 42 36 1 91 3 107 25 1 44 1 0 10 7 1 1 55 3 10 2 34 91 1 51 26 25 75 1 1 18 79 13 1 80 21 16 5 3 0 18 3 7 63 63 66 3 0 5 17 0 21 10 1 3 5 1 6 35 41 29 59 43 21 0 45 3 6 75 1 103 0 ...
result:
ok 322 numbers
Test #10:
score: 0
Accepted
time: 4ms
memory: 9156kb
input:
20 1000 16 6 17 1 12 11 5 8 10 19 4 18 2 9 14 7 15 3 20 13 1 6 8 9 9 11 5 18 3 20 2 9 17 18 12 12 12 20 5 17 1 8 10 10 2 9 17 19 1 7 7 15 12 19 2 7 9 14 2 14 1 4 15 17 11 19 2 5 3 12 11 14 11 14 13 17 7 8 9 18 2 11 8 11 1 4 4 8 12 13 12 19 7 16 12 16 11 15 5 9 5 18 2 19 11 15 1 15 4 20 4 9 5 14 5 19...
output:
13 1 3 67 113 21 1 0 34 57 23 0 21 3 19 29 24 15 15 54 5 3 34 7 30 7 7 8 1 39 36 5 5 7 1 24 45 9 9 6 67 113 9 78 95 9 31 76 34 25 78 9 7 9 3 6 21 5 78 55 70 13 51 5 29 9 7 1 14 9 1 3 13 3 94 39 7 4 104 44 17 24 29 85 26 9 49 67 40 5 3 7 65 0 54 76 14 67 7 18 37 7 19 1 5 11 27 21 30 21 7 95 23 15 40 ...
result:
ok 1000 numbers
Test #11:
score: 0
Accepted
time: 0ms
memory: 9292kb
input:
20 1000 16 8 20 2 5 9 14 7 19 3 13 1 6 18 10 4 15 17 12 11 9 19 12 12 12 19 15 15 6 17 9 16 1 10 4 19 10 13 11 18 2 7 12 17 18 19 4 15 3 18 3 17 5 11 14 17 4 16 3 13 10 10 12 20 1 1 4 8 3 11 8 15 6 7 9 12 1 16 12 20 2 9 8 9 8 9 8 20 17 18 15 20 11 20 1 3 8 10 2 6 8 18 4 12 7 12 3 18 5 14 14 15 6 10 ...
output:
41 0 20 0 53 25 45 91 7 24 13 14 1 63 89 87 21 6 75 51 0 22 0 7 33 29 1 5 101 22 23 1 1 53 1 10 34 3 3 11 43 35 13 89 43 1 7 20 6 33 6 2 1 15 51 41 13 29 1 4 10 51 13 1 16 10 45 19 1 11 3 71 15 22 15 35 87 87 129 23 61 2 33 7 51 0 89 43 3 1 7 71 8 75 7 16 105 19 9 14 43 29 35 33 23 20 29 5 2 3 16 4 ...
result:
ok 1000 numbers
Test #12:
score: 0
Accepted
time: 3ms
memory: 9304kb
input:
20 1000 7 16 3 15 5 6 10 20 19 2 13 1 11 4 8 18 12 17 14 9 9 20 17 19 1 13 5 19 18 18 6 8 6 14 3 16 6 16 12 17 9 11 9 20 7 20 3 18 10 13 2 8 6 17 5 7 7 15 3 8 11 13 13 18 6 15 8 18 5 10 6 8 13 20 6 7 10 13 6 20 10 12 12 18 9 12 4 12 16 18 2 5 1 11 3 10 13 18 6 20 2 4 3 8 13 20 17 20 3 13 1 10 1 15 1...
output:
47 3 48 68 0 2 26 82 52 10 3 47 60 94 7 15 60 2 26 11 3 10 42 36 10 2 22 1 7 76 3 12 5 26 3 5 42 20 10 76 3 11 22 6 34 34 82 4 3 11 12 13 1 2 5 1 0 24 16 124 1 9 5 13 90 3 26 6 94 98 86 3 5 14 37 28 38 3 1 30 98 4 0 60 42 0 1 20 6 16 12 1 1 10 11 18 98 24 16 1 4 80 16 26 28 1 124 6 1 40 14 3 16 10 3...
result:
ok 1000 numbers
Test #13:
score: 0
Accepted
time: 2ms
memory: 9184kb
input:
20 1337 10 3 6 8 7 15 4 5 9 19 17 13 1 18 12 16 20 2 11 14 10 14 4 5 9 11 7 14 2 8 7 18 11 18 9 12 2 6 8 15 11 18 12 16 19 19 8 19 12 16 4 11 2 18 1 6 15 19 2 12 4 9 3 5 16 20 10 14 3 9 10 10 7 17 6 11 8 10 3 4 6 18 7 12 1 15 7 16 16 17 3 16 6 12 4 15 10 17 13 19 4 20 18 19 13 14 3 16 8 10 3 16 1 14...
output:
9 1 3 19 16 50 26 5 6 23 26 11 0 56 11 19 84 12 7 34 13 3 7 9 17 0 40 11 2 1 62 7 73 33 1 57 17 43 28 16 94 1 1 57 2 57 67 74 5 5 24 60 4 76 52 3 1 15 9 16 1 19 15 5 2 35 60 5 35 92 22 3 1 0 3 9 6 6 6 73 54 36 9 14 11 17 0 108 73 67 83 4 44 41 14 83 0 3 1 17 64 4 17 17 45 11 3 15 50 23 4 1 30 17 74 ...
result:
ok 1337 numbers
Test #14:
score: -100
Time Limit Exceeded
input:
1000 1000 40 954 881 24 748 110 805 978 860 472 882 621 530 586 488 928 150 443 553 402 177 702 871 214 778 7 489 874 812 754 90 806 206 60 283 243 416 720 650 539 763 588 570 114 658 396 19 970 372 743 587 885 527 296 3 900 313 968 772 280 691 349 37 178 714 49 122 823 143 632 662 387 88 176 400 63...