Submission #52148

#TimeUsernameProblemLanguageResultExecution timeMemory
52148aquablitz11Wall (IOI14_wall)C++14
100 / 100
942 ms59580 KiB
#include <bits/stdc++.h>
#include "wall.h"
using namespace std;

const int N = 1<<21;
const int INF = 1e9;

int n, lo[N<<1], hi[N<<1], *ans;

void addtag(int p, int c, int d)
{
    int a = lo[p], b = hi[p];
    lo[p] = min(d, max(a, c));
    hi[p] = max(c, min(b, d));
}

void push(int p, int b, int e)
{
    if (b == e) {
        ans[b] = min(max(ans[b], lo[p]), hi[p]);
    } else {
        int m = (b+e)/2;
        addtag(p<<1, lo[p], hi[p]);
        addtag(p<<1|1, lo[p], hi[p]);
    }
    lo[p] = 0;
    hi[p] = INF;
}

void build(int p=1, int b=0, int e=n-1)
{
    hi[p] = INF;
    if (b == e)
        return;
    int m = (b+e)/2;
    build(p<<1, b, m);
    build(p<<1|1, m+1, e);
}

void update(int l, int r, int x, int y, int p=1, int b=0, int e=n-1)
{
    if (e < l || b > r)
        return;
    if (b >= l && e <= r) {
        addtag(p, x, y);
    } else {
        push(p, b, e);
        int m = (b+e)/2;
        update(l, r, x, y, p<<1, b, m);
        update(l, r, x, y, p<<1|1, m+1, e);
    }
}

void finish(int p=1, int b=0, int e=n-1)
{
    push(p, b, e);
    if (b == e)
        return;
    int m = (b+e)/2;
    finish(p<<1, b, m);
    finish(p<<1|1, m+1, e);
}

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[])
{
    ::n = n;
    ans = finalHeight;
    build();
    for (int i = 0; i < k; ++i) {
        if (op[i] == 1)
            update(left[i], right[i], height[i], INF);
        else
            update(left[i], right[i], 0, height[i]);
    }
    finish();

    return;
}

Compilation message (stderr)

wall.cpp: In function 'void push(int, int, int)':
wall.cpp:22:13: warning: unused variable 'm' [-Wunused-variable]
         int m = (b+e)/2;
             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...