社区讨论
为什么编译错误
P4560[IOI 2014] Wall 砖墙参与者 5已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mkl3d6cd
- 此快照首次捕获于
- 2026/01/19 19:38 上个月
- 此快照最后确认于
- 2026/01/23 16:00 4 周前
CPP
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int MAXN=2e6+7,INF=1e9;
int N,M;
struct node{
int L=0,R=INF;
}Tag[MAXN<<2],EMPTY;
node merge(const node &lazy1,const node &lazy2){
// lazy1先执行 lazy2后执行
// 计算出一个总的lazy标记
node lazy3;
lazy3.L=max(lazy1.L,lazy2.L);
lazy3.R=max(lazy1.R,lazy2.L);
lazy3.L=min(lazy3.L,lazy2.R);
lazy3.R=min(lazy3.R,lazy2.R);
return lazy3;
}
void push_down(int x){
Tag[x*2]=merge(Tag[x*2],Tag[x]);
Tag[x*2+1]=merge(Tag[x*2+1],Tag[x]);
Tag[x]=EMPTY;
}
void range_modify(int L,int R,int x,int pL,int pR,node change){
if (R<pL || pR<L) return;
if (L>=pL && R<=pR)
{
Tag[x]=merge(Tag[x],change);
return;
}
push_down(x);
int mid=(L+R)/2;
range_modify(L,mid,x*2,pL,pR,change);
range_modify(mid+1,R,x*2+1,pL,pR,change);
}
void query(int L,int R,int x,int QL,int QR){ // 查询默认QL=QR 目的是为了把A[Ql]的值纠正
if (R<QL || QR<L) return;
if (L>=QL && R<=QR)
{
cout<<Tag[x].L<<"\n";
return;
}
int mid=(L+R)/2;
push_down(x);
query(L,mid,x*2,QL,QR);
query(mid+1,R,x*2+1,QL,QR);
}
//支持 单点修改 区间求和
signed main(){
int n,k,t,L,R,h; cin>>n>>k;
for (int i=1;i<=k;i++)
{
cin>>t>>L>>R>>h;
L++;R++;
node now;
if (t==1) now.L=h;
else now.R=h;
range_modify(1,n,1,L,R,now);
}
for (int i=1;i<=n;i++)
// {
query(1,n,1,i,i);
// cout<<A[i]<<endl;
// }
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...