QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#457923#1848. Interval ShuffleEgorSavWA 350ms13816kbC++232.5kb2024-06-29 14:48:392024-06-29 14:48:39

Judging History

This is the latest submission verdict.

  • [2024-06-29 14:48:39]
  • Judged
  • Verdict: WA
  • Time: 350ms
  • Memory: 13816kb
  • [2024-06-29 14:48:39]
  • Submitted

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'