正确代码。找bug中
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 100009
#define INF (1e18)-1
int n,m;
int l[M],r[M],p[M];
int laz[M<<2],val[M<<2];
void pushup(int rt)
{
val[rt] = val[rt<<1] & val[rt<<1|1];
}
void pushdown(int rt)
{
if(laz[rt])
{
val[rt<<1] |= laz[rt];
val[rt<<1|1] |= laz[rt];
laz[rt<<1] |= laz[rt];
laz[rt<<1|1] |= laz[rt];
laz[rt] = 0;
}
}
void build(int l,int r,int rt)
{
laz[rt] = 0;
if(l == r)
{
val[rt] = 0;
return ;
}
int m = (l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
pushup(rt);
}
void update(int a,int b,int c,int l,int r,int rt)
{
if(a <= l && r <= b)
{
val[rt] |= c;
laz[rt] |= c;
return ;
}
pushdown(rt);
int m = (l+r)>>1;
if(a <= m) update(a,b,c,l,m,rt<<1);
if(b > m) update(a,b,c,m+1,r,rt<<1|1);
pushup(rt);
}
int query(int a,int b,int l,int r,int rt)
{
if(a <= l && r <= b)
{
return val[rt];
}
pushdown(rt);
int m = (l+r)>>1;
int ret = INF;
if(a <= m) ret &= query(a,b,l,m,rt<<1);
if(b > m) ret &= query(a,b,m+1,r,rt<<1|1);
return ret;
}
bool judge()
{
for(int i=1;i<=n;i++) cout<<query(i,i,1,n,1)<<" ";
cout<<endl;
for(int i = 0;i < m;i++)
{
cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl;
if(query(l[i],r[i],1,n,1) != p[i])
return true;
}
printf("YES\n");
for(int i = 1;i < n;i++)
{
printf("%d ",query(i,i,1,n,1));
}
printf("%d\n",query(n,n,1,n,1));
return false;
}
int main()
{
while(scanf("%d %d",&n,&m)==2)
{
build(1,n,1);
for(int i = 0;i < m;i++)
{
scanf("%d %d %d",&l[i],&r[i],&p[i]);
update(l[i],r[i],p[i],1,n,1);
cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl;
}
if(judge())
printf("NO\n");
}
return 0;
}
编译器报了什么错误?Compile Error? Runtime Error?