QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#457923 | #1848. Interval Shuffle | EgorSav | WA | 350ms | 13816kb | C++23 | 2.5kb | 2024-06-29 14:48:39 | 2024-06-29 14:48:39 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
int t[1000010], lz[1000010];
int lzmx[1000010];
int st;
void build(int v, int tl, int tr) {
if(tl == tr) {
t[v] = a[v - st + 1];
return;
}
int tm = (tl + tr) / 2;
build(v * 2, tl, tm);
build(v * 2 + 1, tm + 1, tr);
t[v] = max(t[v * 2], t[v * 2 + 1]);
}
void spush(int v) {
lz[v * 2] += lz[v];
lz[v * 2 + 1] += lz[v];
t[v * 2] += lz[v];
t[v * 2 + 1] += lz[v];
lzmx[v * 2] += lz[v];
lzmx[v * 2 + 1] += lz[v];
lzmx[v * 2] = max(lzmx[v * 2], lzmx[v]);
lzmx[v * 2 + 1] = max(lzmx[v * 2 + 1], lzmx[v]);
t[v * 2] = max(t[v * 2], lzmx[v * 2]);
t[v * 2 + 1] = max(t[v * 2 + 1], lzmx[v * 2 + 1]);
lz[v] = 0;
}
void md(int v, int tl, int tr, int l, int r, int x) {
if(tl > r | tr < l)
return;
if(tl >= l && tr <= r) {
lzmx[v] = max(lzmx[v], x);
t[v] = max(t[v], x);
return;
}
spush(v);
int tm = (tl + tr) / 2;
md(v * 2, tl, tm, l, r, x);
md(v * 2 + 1, tm + 1, tr, l, r, x);
t[v] = max(t[v * 2], t[v * 2 + 1]);
}
void add(int v, int tl, int tr, int l, int r) {
if(tl > r || tr < l)
return;
if(tl >= l && tr <= r) {
t[v]++;
lz[v]++;
lzmx[v]++;
return;
}
spush(v);
int tm = (tl + tr) / 2;
add(v * 2, tl, tm, l, r);
add(v * 2 + 1, tm + 1, tr, l, r);
t[v] = max(t[v * 2], t[v * 2 + 1]);
}
int get(int v, int tl, int tr, int l, int r) {
if(tl > r || tr < l)
return 0;
if(tl >= l && tr <= r) {
return t[v];
}
spush(v);
int tm = (tl + tr) / 2;
int res = max(get(v * 2, tl, tm, l, r), get(v * 2 + 1, tm + 1, tr, l, r));
t[v] = max(t[v * 2], t[v * 2 + 1]);
return res;
}
void pushall(int v, int tl, int tr) {
if(tl == tr)
return;
spush(v);
int tm = (tl + tr) / 2;
pushall(v * 2, tl, tm);
pushall(v * 2 + 1, tm + 1, tr);
}
int32_t main() {
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
st = 1;
while(st < n)
st *= 2;
build(1, 1, st);
for(int i = 1; i <= m; i++) {
int l, r;
cin >> l >> r;
int mx = get(1, 1, st, l, r);
add(1, 1, st, l, r);
md(1, 1, st, l, r, mx);
}
for(int i = 1; i <= n; i++)
cout << t[i + st - 1] << " ";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 7588kb
input:
4 3 0 1 0 1 2 4 1 3 2 3
output:
2 4 3 2
result:
ok 4 number(s): "2 4 3 2"
Test #2:
score: -100
Wrong Answer
time: 350ms
memory: 13816kb
input:
188394 182563 1 40 31 12 49 8 30 49 46 22 49 36 11 47 15 32 20 18 11 41 4 49 31 28 14 33 27 3 5 30 23 30 36 42 24 5 35 25 8 21 7 7 0 1 10 34 26 16 15 36 39 4 11 41 34 30 7 40 7 26 27 50 6 4 15 12 20 2 16 45 8 37 12 25 33 3 23 16 13 47 33 40 25 8 29 42 25 34 49 17 1 12 37 7 27 11 44 11 38 6 46 17 35 ...
output:
1 49137 78140 84593 49 8 30 49 8422 21739 8422 14394 11 47 15 32 20 18 71841 72015 49137 53794 65077 70312 14 33 27 3 5 30 65077 65629 65629 65880 75947 77215 35 25 60748 61948 25266 30388 0 1 25266 26419 26419 29635 35007 35568 10306 11314 78140 78603 40258 40627 65958 67889 67889 68972 21739 25126...
result:
wrong answer 5th numbers differ - expected: '84593', found: '49'