题意 : 一个数组 给出m个限制条件 l r z 代表从l 一直 & 到 r 为 z  问能否构造出这种数组 如果可以 构造出来

因为 n m 都是1e5 而l r 可能输入进去就超时了 所以刚写完线段树课件的我想了很久想出来了线段树解法 ...

想法是这样的 每次输入 update 结束后 全部query一遍 看看是否和期望一样

一开始的想法是 存下每个数组的&值 一开始是1<<31 - 1 然后每次进行update 都求出这个区间在树上区间没有被更新到的点的& 三者一& 继续向下

但是感觉时间复杂度很玄学 写完直接wa掉了

后来想出了 | 的解法

思想 :

利用tree存放每个区间的&的值 一开始是0

如果我们对一个区间有一个期望 : l - r = z 那么一定满足一个东西 : l - r 的数字在二进制上全都包含z

所以每次 我们都对这个区间进行一个 | 上 z 的运算 至少要让 l - r 的数字拥有z

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
using namespace std;
#define L long long
struct node{int l , r ;int z ;
}tr[100000 * 5];
int mark[100000 * 5] ;
int n , m ;
node in[100500] ;int maxx ;void crea(int ro , int l ,int r ) {tr[ro].l = l ;tr[ro].r = r ;tr[ro].z = 0 ;if(l == r)return ;int mid = (l + r) / 2 ;crea(ro*2 , l , mid ) ;crea(ro*2+1, mid + 1 , r) ;
}
void pushdown(int ro) {if(mark[ro] == 0) {return ;}if(tr[ro].l == tr[ro].r) return ;mark[ro*2] |= mark[ro] ;mark[ro*2+1] |= mark[ro] ;tr[ro*2].z |= mark[ro] ;tr[ro*2+1].z |= mark[ro] ;mark[ro] = 0 ;return ;
}int query(int ro , int l , int r ){pushdown(ro) ;if(l <= tr[ro].l && r >= tr[ro].r) {return tr[ro].z ;}int mid = (tr[ro].l + tr[ro].r) / 2 ;if(r <= mid) {return query(ro*2 , l , r ) ;}else if(l >= mid + 1 ) {return query(ro*2+1 , l , r ) ;}else {return query(ro*2 , l , r ) & query(ro*2+1 , l , r ) ;}
}void upda(int ro , int l , int r , int z) {pushdown(ro) ;if(l <= tr[ro].l && r >= tr[ro].r) {tr[ro].z |= z ;mark[ro] = z ;return ;}if(tr[ro].l == tr[ro].r) return ;int mid = (tr[ro].l + tr[ro].r) / 2 ;if(r <= mid){upda(ro*2 , l , r , z) ;}else if(l >= mid + 1) {upda(ro*2+1 , l , r , z) ;}else {upda(ro*2 , l , mid , z) ;upda(ro*2+1 , mid + 1 , r , z) ;}tr[ro].z = tr[ro*2].z & tr[ro*2+1].z ;
}int main(){while(scanf("%d%d",&n,&m)!=EOF){maxx = (1 << 31)- 1 ;for(int i = 0 ; i <= n * 5 - 5 ; i ++ ) {mark[i] = 0 ;}crea(1,1,n) ;for(int i = 1; i <= m ; i ++ ){scanf("%d%d%d" , &in[i].l, &in[i].r , &in[i].z) ;upda(1 , in[i].l , in[i].r , in[i].z) ;}bool ok = true ;for(int i = 1; i <= m ; i ++ ){int z = query(1 , in[i].l , in[i].r ) ;if(z != in[i].z) {ok = false ;break ;}}if(ok) {printf("YES\n") ;for(int i = 1; i <= n ; i ++ ){printf("%d",query(1,i,i)) ;if(i == n)printf("\n");else printf(" ") ;}}else {printf("NO\n") ;}}
}

  

转载于:https://www.cnblogs.com/rayrayrainrain/p/6345082.html

Codeforces Round #275 (Div. 2) D相关推荐

  1. Codeforces Round #275 (Div. 2) c

    2019独角兽企业重金招聘Python工程师标准>>> /*** @brief Codeforces Round #275 (Div. 2) c* @file c.cpp* @aut ...

  2. 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation

    题目传送门 1 /* 2 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 3 这样保证不会超出边界并且以防其余的数相邻绝对值差>k 4 ...

  3. Educational Codeforces Round 112(Div.2) ABC题解

    D题好像可以做一做,挖个坑以后做好了来填(doge Educational Codeforces Round 112(Div.2) 题目列表 1.A 2.B 3.C 1.A 原题链接 题目大意 有三种 ...

  4. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  5. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  6. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  7. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  8. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  9. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

最新文章

  1. html实现点赞评论功能_html的canvas实现画布功能
  2. android源码阅读笔记1-配置源码路径/阅读源码方法讨论
  3. 图解C++虚函数 虚函数表
  4. sql能查到数据 dataset对象里面没有值_DataSet
  5. valid Palindrome -- leetcode
  6. IT行业的你,在成本部门还是利润部门
  7. 017——数组(十七) asort ksort rsort arsort krsort
  8. python下雨动画特效_pygame用blit()实现动画效果
  9. java treemap 排序原理_Java TreeMap排序算法实例
  10. 使用three.js的着色器通道一之渲染地球模型
  11. 一文解读Masked Autoencoder(MAE)
  12. 概率论与数理统计基础概念与重要定义汇总
  13. springcloud config非对称加密
  14. 基于主从博弈的智能小区电动汽车充电管理及代理商定价策略
  15. Hadoop2.x与3.x的区别:
  16. webp文件_什么是WebP文件(以及如何打开一个文件)?
  17. Tensorflow - tf.cond 与条件判断
  18. 梯度值与参数更新optimizer.zero_grad(),loss.backward、和optimizer.step()、lr_scheduler.step原理解析
  19. EduCoder-程序设计技术R-函数-(第1关:求和)(第2关:回文数计算)(第3关: 编写函数求表达式的值)(第4关:阶乘数列)(第5关:亲密数)(第6关:公约公倍数)
  20. Android中图像变换Matrix的原理、代码验证和应用(一)

热门文章

  1. ssm框架逻辑删除mysql_ssm框架小总结——批量删除
  2. 不能使用zsh或myzsh创建/切换 包含#的分支名(zsh: bad pattern: #xxx)
  3. mysql卸载rpm包_mysql彻底卸载(rpm安装包)
  4. MS DOS窗口进入JAVA源程序,从java程序运行MS-DOS命令
  5. ftp服务器端的编写 c语言6,linux下c语言编写的ftp服务器
  6. hbase读写数据流程
  7. VB LISTBOX
  8. 影视光盘制作专家 6.3简体中文免费版
  9. VB得到指定文件夹下的文件列表
  10. 心情随笔(五):九月依然精彩