分析:or操作只有在结果的这一位为0的情况下才会强制要求两个数的这一位都为0,其它时候不强求,所以为了最大限度地满足条件,我们先把所有的数的所有位全部变成1,如果p的第i位为0,那么[l,r]的数的第i位都要为0,&一下p就好了.最后检验一下看看是否满足所有条件就可以了。为什么这样做事合法的呢?因为我们之前已经尽可能让它最大限度地满足条件了,某一位更改后可能就不能满足这么多条件了,如果这都不行,那么肯定无解.因为是区间&操作,所以用线段树来优化.

构造题要满足所有的条件,那么就构造出尽可能多地满足条件的,最后检验一下就可以了.

注意:实际操作是|,但是每次进行的操作是&,在合并和修改的时候不要弄混了.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int inf = ( << ) - , maxn = ; int n, m, l[maxn], r[maxn], p[maxn], v[maxn * ], tag[maxn * ], flag[maxn * ];
bool can = true; void build(int o, int l, int r)
{
tag[o] = v[o] = inf;
if (l == r)
return;
int mid = (l + r) >> ;
build(o * , l, mid);
build(o * + , mid + , r);
} void pushup(int o)
{
v[o] = v[o * ] | v[o * + ];
} void pushdown(int o)
{
if (flag[o])
{
flag[o * ] = flag[o * + ] = ;
flag[o] = ;
tag[o * ] &= tag[o];
tag[o * + ] &= tag[o];
v[o * ] &= tag[o];
v[o * + ] &= tag[o];
tag[o] = inf;
}
} void update(int o, int l, int r, int x, int y, int c)
{
if (x <= l && r <= y)
{
tag[o] &= c;
v[o] &= c;
flag[o] = ;
return;
}
pushdown(o);
int mid = (l + r) >> ;
if (x <= mid)
update(o * , l, mid, x, y, c);
if (y > mid)
update(o * + , mid + , r, x, y, c);
pushup(o);
} int query(int o, int l, int r, int x, int y)
{
if (x <= l && r <= y)
return v[o];
pushdown(o);
int mid = (l + r) >> , res = ;
if (x <= mid)
res |= query(o * , l, mid, x, y);
if (y > mid)
res |= query(o * + , mid + , r, x, y);
return res;
} int main()
{
freopen("or1.in", "r", stdin);
freopen("or2.txt", "w", stdout);
scanf("%d%d", &n, &m);
build(, , n);
for (int i = ; i <= m; i++)
{
scanf("%d%d%d", &l[i], &r[i], &p[i]);
update(, , n, l[i], r[i], p[i]);
}
for (int i = ; i <= m; i++)
if (query(, , n, l[i], r[i]) != p[i])
{
can = ;
break;
}
if (can == false)
printf("No\n");
else
{
printf("Yes\n");
for (int i = ; i <= n; i++)
printf("%d ",query(,,n,i,i));
} return ;
}

最新文章

  1. LogBack简易教程
  2. 比CMD更强大的命令行WMIC
  3. About SSDT BI
  4. pdf.js在IIS中配置使用笔记
  5. web中的触摸(touch)与手势(gesture)事件
  6. 【转载】H264--1--编码原理以及I帧B帧P帧
  7. 34-php基础:cookie
  8. node.js 资料
  9. Compactness问题
  10. Android Activity 注意笔记
  11. building Utils {{ant+ivy}、{maven}}怎么样手动将下载下来的 JAR 包添加到 Maven、ivy 的本地仓库
  12. DFS Zoj 2110
  13. 介绍PS大局观很不错的转文
  14. Struts+Spring+Hibernate项目整合AJAX+JSON
  15. phpstorm快捷键记录
  16. UVA-804 模拟
  17. mongodb的部署记录
  18. Java使用POI解析Excel表格
  19. Linux 服务器运行健康状况监控利器 Spotlight on Unix 的安装与使用
  20. 03LaTeX学习系列之---TeXworks的使用

热门文章

  1. bzoj3907 网格 &amp; bzoj2822 [AHOI2012]树屋阶梯——卡特兰数+高精度
  2. C# MySql Select
  3. roundabout旋转幻灯
  4. 9.23 NOIP模拟题(数学专练)
  5. Akka源码分析-Remote-Creating Actors Remotely
  6. vscode----vue中HTML代码tab键自动补全
  7. MyEclipse找不到install new software
  8. css为什么叫层叠样式表
  9. 小小的IP,大大的耦合,你痛过吗?
  10. React Native真机调试安卓版