QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#457936#1848. Interval ShuffleEgorSavRE 1ms5560kbC++232.5kb2024-06-29 14:52:382024-06-29 14:52:40

Judging History

This is the latest submission verdict.

  • [2024-06-29 14:52:40]
  • Judged
  • Verdict: RE
  • Time: 1ms
  • Memory: 5560kb
  • [2024-06-29 14:52:38]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

int a[200010];
int t[800010], lz[800010];
int lzmx[800010];
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: 5560kb

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
Runtime Error

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:


result: