Submission #1019404

# Submission time Handle Problem Language Result Execution time Memory
1019404 2024-07-10T19:18:40 Z n3rm1n Wall (IOI14_wall) C++17
0 / 100
3000 ms 18676 KB
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int MAXN = 1e5 + 10;

struct node
{
    int minval, maxval, lazy;
    node()
    {
        minval = 0;
        maxval = 0;
        lazy = -1;
    }
};

int n;
node t[MAXN * 4];

void push_lazy(int i, int l, int r)
{
    if(t[i].lazy != -1)
    {
        t[i].minval = t[i].lazy;
        t[i].maxval = t[i].lazy;
    }
    if(l != r && t[i].lazy != -1)
    {
        t[2*i].lazy = t[i].lazy;
        t[2*i+1].lazy = t[i].lazy;
    }
    t[i].lazy = -1;
}

int ql, qr, x;
void upd_minimum(int i, int l, int r)
{
    push_lazy(i, l, r);
    if(ql > r || qr < l)return;

    if(ql <= l && r <= qr)
    {
        if(t[i].maxval <= x)return;
        if(t[i].minval > x)
        {
            t[i].lazy = x;
            push_lazy(i, l, r);
            return;
        }
    }
    int mid = (l + r)/2;
    upd_minimum(2*i, l, mid);
    upd_minimum(2*i, mid+1, r);

    t[i].minval = min(t[2*i].minval, t[2*i+1].minval);
    t[i].maxval = max(t[2*i].maxval, t[2*i+1].maxval);
}

void upd_maximum(int i, int l, int r)
{
    push_lazy(i, l, r);
    if(ql > r || qr < l)return;

    if(ql <= l && r <= qr)
    {
        if(t[i].minval >= x)return;
        if(t[i].maxval < x)
        {
            t[i].lazy = x;
            push_lazy(i, l, r);
            return;
        }
    }
    int mid = (l + r)/2;
    upd_maximum(2*i, l, mid);
    upd_maximum(2*i, mid+1, r);

    t[i].minval = min(t[2*i].minval, t[2*i+1].minval);
    t[i].maxval = max(t[2*i].maxval, t[2*i+1].maxval);
}

int h[MAXN];
void build(int i, int l, int r)
{
    push_lazy(i, l, r);
    if(l == r)
    {
        h[l] = t[i].minval;
        return;
    }
    int mid = (l + r)/2;
    build(2*i, l, mid);
    build(2*i+1, mid+1, r);
}
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[])
{
    for (int i = 0; i < k; ++ i)
    {
        ql = left[i] + 1;
        qr = right[i] + 1;
        x = height[i];
        if(op[i] == 1)
            upd_maximum(1, 1, n);
        else upd_minimum(1, 1, n);
    }
    build(1, 1, n);
    for (int i = 1; i <= n; ++ i)
        finalHeight[i-1] = h[i];
    return;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4952 KB Output is correct
2 Correct 3 ms 5276 KB Output is correct
3 Incorrect 4 ms 4952 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4956 KB Output is correct
2 Correct 87 ms 18676 KB Output is correct
3 Execution timed out 3056 ms 12180 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4952 KB Output is correct
2 Correct 3 ms 5212 KB Output is correct
3 Incorrect 4 ms 4956 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4956 KB Output is correct
2 Correct 3 ms 5212 KB Output is correct
3 Incorrect 4 ms 4956 KB Output isn't correct
4 Halted 0 ms 0 KB -