제출 #1361527

#제출 시각아이디문제언어결과실행 시간메모리
1361527MunkhErdene벽 (IOI14_wall)C++17
100 / 100
265 ms88976 KiB
#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define FOR(i, a, b) for(ll i = (a); i < (b); i++)
#define FORD(i, a, b) for(ll i = (a); i >= (b); i--)

const int inf = 2e9;

const int N = 2e6 + 5;

vector<int> mn(N * 4, 0);
vector<int> mx(N * 4, inf);

void update(int v, int tl, int tr, int l, int r, int cur, int state) {
    cur = max(cur, mn[v]);
    cur = min(cur, mx[v]);
    if(l > tr || r < tl) return;
    if(l <= tl && r >= tr) {
        if(state == 1) mn[v] = cur;
        if(state == 2) mx[v] = cur;
        return;
    }
    ll tm = (tl + tr) / 2;
    update(v * 2, tl, tm, l, r, cur, state);
    update(v * 2 + 1, tm + 1, tr, l, r, cur, state);

}

void answer(int v, int tl, int tr, int cur, int finalHeight[]) {
    cur = max(cur, mn[v]);
    cur = min(cur, mx[v]);
    if(tl == tr) {
        finalHeight[tl] = cur;
        return;
    }
    ll tm = (tl + tr) / 2;
    answer(v * 2, tl, tm, cur, finalHeight);
    answer(v * 2 + 1, tm + 1, tr, cur, finalHeight);
}

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
    FORD(i, k - 1, 0) {
        update(1, 0, n - 1, left[i], right[i], height[i], op[i]);
    }
    answer(1, 0, n - 1, 0, finalHeight);
}


#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…