답안 #203067

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
203067 2020-02-19T07:46:13 Z detaomega 벽 (IOI14_wall) C++14
0 / 100
622 ms 12712 KB
#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define IOS ios::sync_with_stdio(0);cin.tie(0);
#define de(x,y) cout<<#x<<" :"<<x<<y;
//#define int long long
#define SZ(xx) ((int)xx.size())
#define lowbit(xx) (xx&(-xx))
#define pb push_back
#define ls node*2
#define rs node*2+1
typedef pair<int,int> pii;
 
const int maxn = 3e6+5;
const int INF = 1e9+5;
int mx[maxn * 4], mn[maxn * 4], tag[maxn * 4], ans[maxn];
 
void push(int node) {
	if(mn[ls] != INF) {
		mx[ls] = min(mx[ls], mn[ls]);
	}
	if(mn[rs] != INF) {
		mx[rs] = min(mx[rs], mn[rs]);
	}
	if(tag[node]) {
		tag[rs] = tag[ls] = 1;
		mn[rs] = mn[ls] = INF;
	} 
	mx[ls] = max(mx[ls], mx[node]);
	mx[rs] = max(mx[rs], mx[node]);
	mn[ls] = min(mn[ls], mn[node]);
	mn[rs] = min(mn[rs], mn[node]);
	mx[node] = 0;
	mn[node] = INF;
	tag[node] = 0;
}
 
void upd(int node,int l,int r,int a,int b,int type,int val) {
	if(a <= l && r <= b) {
		if(type == 1) {
			if(l != r) {
				push(node);
			}
			if(mn[node] != INF)
				mx[node] = min(mn[node], mx[node]);
			tag[node] = 1;
			mn[node] = INF;
			mx[node] = max(mx[node], val);
		}
		else {
			tag[node] = 0;
			mn[node] = min(mn[node], val);
			mx[node] = min(mx[node], mn[node]);
		}
	}	
	else {
		push(node);
		int m = (l + r) >> 1;
		if(a <= m) upd(ls, l, m, a, b, type, val);
		if(b > m) upd(rs, m+1, r, a, b, type, val);
	}
}
 
void travel(int node,int l,int r) {
	if(l == r) {
		if(mn[node] != INF)
			ans[l] = min(mn[node], mx[node]);
		else
			ans[l] = mx[node];	
	}
	else {
		push(node);
		int m = (l + r) >> 1;
		travel(ls, l, m);
		travel(rs, m+1, r);
	}
}
 
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
	for(int i=1; i<=n * 2+10; i++) {
		mx[i] = 0;
		mn[i] = INF;
		tag[i] = 1; 
	}
	for(int i=0; i<k; i++) {
		upd(1, 1, n, left[i]+1, right[i]+1, op[i], height[i]);
	}
	travel(1, 1, n);
	for(int j=1; j<=n; j++) {
		finalHeight[j-1] =  ans[j];
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 7 ms 504 KB Output is correct
3 Incorrect 7 ms 376 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 380 KB Output is correct
2 Correct 186 ms 8564 KB Output is correct
3 Correct 221 ms 4984 KB Output is correct
4 Incorrect 622 ms 12712 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 7 ms 504 KB Output is correct
3 Incorrect 7 ms 376 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 7 ms 504 KB Output is correct
3 Incorrect 6 ms 248 KB Output isn't correct
4 Halted 0 ms 0 KB -