제출 #130504

#제출 시각아이디문제언어결과실행 시간메모리
130504antimirage벽 (IOI14_wall)C++14
100 / 100
1108 ms99528 KiB
#include "wall.h"
#include <bits/stdc++.h>

using namespace std;

const int N = 2e6 + 5;	

int mx[N * 4], mn[N * 4], n;

void upd (int v, int val, int t) {
	if (t == 1) {
		mn[v] = max(mn[v], val);
		mx[v] = max(mx[v], val);
	}
	else {
		mn[v] = min(mn[v], val);
		mx[v] = min(mx[v], val);
	}
}
void push (int v) {
	upd(v + v, mx[v], 1);
	upd(v + v, mn[v], 2);
	upd(v + v + 1, mx[v], 1);
	upd(v + v + 1, mn[v], 2);
	mx[v] = 0;
	mn[v] = 1e9;
}
void update (int l, int r, int val, int t, int v = 1, int tl = 1, int tr = n) {
	if (l > tr || tl > r)
		return;
		
	if (l <= tl && tr <= r) {
		upd(v, val, t);
		return;
	}
	push(v);
	int tm = (tl + tr) >> 1;
	update(l, r, val, t, v + v, tl, tm);
	update(l, r, val, t, v + v + 1, tm + 1, tr);
}
int get (int pos, int v = 1, int tl = 1, int tr = n) {
	if (tl == tr)
		return mx[v];
	push(v);	
	int tm = (tl + tr) >> 1;
	
	if (pos <= tm)
		return get(pos, v + v, tl, tm);
	return get(pos, v + v + 1, tm + 1, tr);
}
void buildWall(int N, int k, int op[], int l[], int r[], int a[], int ans[]) { 
	n = N;
	
	memset(mn, 0x3f3f3f3f, sizeof(mn));
	memset(mx, 0, sizeof(mx));
	for (int i = 0; i < k; i++) {
		update( l[i] + 1, r[i] + 1, a[i], op[i] );		
	}
	for (int i = 0; i < n; i++) {
		ans[i] = get(i + 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...