提交记录
#include<bits/stdc++.h>
#define ls(id) (id<<1)
#define rs(id) ((id<<1)|1)
#define N 2000004
using namespace std;
int n,q;
struct node{
int l,r,tag1,tag2;
}tree[N<<2];
inline void push_down(int id){
if(!tree[id].tag1&&tree[id].tag2==1e9)return;
if(tree[id].tag1){
tree[ls(id)].tag1=max(tree[ls(id)].tag1,tree[id].tag1);
tree[ls(id)].tag2=max(tree[ls(id)].tag2,tree[id].tag1);
tree[rs(id)].tag1=max(tree[rs(id)].tag1,tree[id].tag1);
tree[rs(id)].tag2=max(tree[rs(id)].tag2,tree[id].tag1);
}
else{
tree[ls(id)].tag2=min(tree[ls(id)].tag2,tree[id].tag2);
tree[ls(id)].tag1=min(tree[ls(id)].tag1,tree[id].tag2);
tree[rs(id)].tag2=min(tree[rs(id)].tag2,tree[id].tag2);
tree[rs(id)].tag1=min(tree[rs(id)].tag1,tree[id].tag2);
}
tree[id].tag1=0,tree[id].tag2=1e9;
}
void build(int id,int l,int r){
tree[id].l=l,tree[id].r=r;
tree[id].tag1=0,tree[id].tag2=1e9;
if(l==r)return;
int mid=l+r>>1;
build(ls(id),l,mid);
build(rs(id),mid+1,r);
}
void update(int id,int l,int r,int h,bool f){
if(tree[id].l>r||tree[id].r<l)return;
if(l<=tree[id].l&&tree[id].r<=r){
if(!f){
tree[id].tag1=max(tree[id].tag1,h);
tree[id].tag2=max(tree[id].tag2,h);
}
else{
tree[id].tag2=min(tree[id].tag2,h);
tree[id].tag1=min(tree[id].tag1,h);
}
return;
}
push_down(id);
update(ls(id),l,r,h,f);
update(rs(id),l,r,h,f);
}
void print(int id){
if(tree[id].l==tree[id].r){
printf("%d\n",tree[id].tag1);
return;
}
push_down(id);
print(ls(id));
print(rs(id));
}
int main(){
scanf("%d%d",&n,&q);
build(1,1,n);
int op,l,r,h;
while(q--){
scanf("%d%d%d%d",&op,&l,&r,&h);
l++,r++;
if(op==1)
update(1,l,r,h,0);
else
update(1,l,r,h,1);
}
print(1);
}