#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
struct node{
	int s, e, m, val, mx, mn;
	node *l, *r;
	
	node(int S, int E){
		s=S, e=E, m=(s+e)/2;
		val=0;
		mx=INT_MIN/2, mn=INT_MAX/2;
		if (s!=e){
			l=new node(s, m);
			r=new node(m+1, e);
		}
	}
	void propagate(){
		val=max(min(val, mn), mx);
		if (s!=e){
			l->mn=min(l->mn, mn);
			l->mx=max(min(l->mx, mn), mx);
			r->mn=min(r->mn, mn);
			r->mx=max(min(r->mx, mn), mx);
		}
		mn=INT_MAX/2;
		mx=INT_MIN/2;
	}
	void upmin(int left, int right, int v){
		propagate();
		if (s==left&&e==right){
			mn=min(mn, v);
			mx=min(mx, v);
			return;
		}
		if (right<=m)l->upmin(left, right, v);
		else if (left>m)r->upmin(left, right, v);
		else l->upmin(left, m, v), r->upmin(m+1, right, v);
	}
	void upmax(int left, int right, int v){
		propagate();
		if (s==left&&e==right){
			mx=max(mx, v);
			return;
		}
		if (right<=m)l->upmax(left, right, v);
		else if (left>m)r->upmax(left, right, v);
		else l->upmax(left, m, v), r->upmax(m+1, right, v);
	}
	int query(int i){
		propagate();
		if (s==e)return val;
		if (i<=m)return l->query(i);
		return r->query(i);
	}
}*st;
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
	st = new node(0, n-1);
	for (int i=0; i<k; ++i){
		if (op[i]==1)st->upmax(left[i], right[i], height[i]);
		else st->upmin(left[i], right[i], height[i]);
	}
	for (int i=0; i<n; ++i)finalHeight[i]=st->query(i);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |