제출 #1232340

#제출 시각아이디문제언어결과실행 시간메모리
1232340nguyenkhangninh99벽 (IOI14_wall)C++20
100 / 100
435 ms66948 KiB
#include <bits/stdc++.h>
#include "wall.h"

using namespace std;

const int maxn = 2e6 + 5;

int stl[4 * maxn], str[4 * maxn], res[maxn];

void app(int i, int xl, int xr) {
	stl[i] = min(max(stl[i], xl), xr);
	str[i] = min(max(str[i], xl), xr);
}

void push(int id){
	app(id * 2, stl[id], str[id]);
	app(id * 2 + 1, stl[id], str[id]);
	stl[id] = 0;
	str[id] = 1e5;
}

void update(int u, int v, int xl, int xr, int id, int l, int r){
    if(l > v || r < u) return;
	if(u <= l && r <= v) app(id, xl, xr);
	else{
        int mid = (l + r) / 2;
        push(id);
        update(u, v, xl, xr, id * 2, l, mid);
        update(u, v, xl, xr, id * 2 + 1, mid + 1, r);
    }
}

void build(int id, int l, int r){
	if(l == r) res[l] = stl[id];
	else{
        int mid = (l + r) / 2;
        push(id);
        build(id * 2, l, mid);
        build(id * 2 + 1, mid + 1, r);
    }
}

void buildWall(int n, int k, int op[], int l[], int r[], int h[], int ans[]) { 
    for(int i = 0; i < k; i++) update(l[i], r[i], op[i] ^ 2 ? h[i] : 0, op[i] ^ 1 ? h[i] : 1e5, 1, 0, n - 1);

    build(1, 0, n - 1);
    for(int i = 0; i < n; i++) ans[i] = res[i];
}
/*
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
 
    int n, k; cin >> n >> k;

	while(k--){
        int op, l, r, h; cin >> op >> l >> r >> h;
		update(l, r, op ^ 2 ? h : 0, op ^ 1 ? h : 1e5, 1, 0, n - 1);
    }
	build(1, 0, n - 1);
} */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...