CF_275_DIV2_D_Interesting Array
参考了Yoangh大牛的博客
链接:http://blog.csdn.net/y990041769/article/details/40590953
题意:构建一个有n个元素的序列,满足题中给出的m条约束,即数列要满足第Li个数字到第Ri个数字的&等于Qi,如有满足的序列,输出YES,否则输出NO。
思路:如果某个位置处于不同的区间交内,那么这个位置的数字一定要等于那些区间的Qi的或,这样才能把每一位的1保存下来,处理的时候每读入一条约束,用线段树去更新,读完数据判断是否所有区间都满足约束,若满足,则在线段树内从上至下的更新答案。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>using namespace std;const int N=1e5+2;
int ans[N];
int ii;struct C
{int l,r,q;
} c[100005];struct Node
{int l,r,s;
} tree[N*4];void build(int l,int r,int root)
{tree[root].l=l;tree[root].r=r;tree[root].s=0;if(l==r)return ;int m=(l+r)>>1;build(l,m,root<<1);build(m+1,r,root<<1|1);
}void update(int l,int r,int c,int root)
{if(tree[root].l==l&&tree[root].r==r){tree[root].s=tree[root].s|c;return ;}int m=(tree[root].l+tree[root].r)>>1;if(r<=m)update(l,r,c,root<<1);else if(l>m)update(l,r,c,root<<1|1);else{update(l,m,c,root<<1);update(m+1,r,c,root<<1|1);}
}int query(int l,int r,int root)
{if(tree[root].l==l&&tree[root].r==r)return tree[root].s;int m=(tree[root].l+tree[root].r)>>1;if(r<=m)return query(l,r,root<<1);else if(l>m)return query(l,r,root<<1|1);elsereturn query(l,m,root<<1)&query(m+1,r,root<<1|1);
}void solve(int root)
{if(root!=1)tree[root].s|=tree[root>>1].s;if(tree[root].l==tree[root].r){ans[ii]=tree[root].s;ii++;return ;}solve(root<<1);solve(root<<1|1);
}int main()
{int n,m;while(scanf("%d%d",&n,&m)!=EOF){build(1,n,1);for(int i=1; i<=m; i++){scanf("%d%d%d",&c[i].l,&c[i].r,&c[i].q);update(c[i].l,c[i].r,c[i].q,1);}int flag=1;for(int i=1; i<=m; i++){if(query(c[i].l,c[i].r,1)!=c[i].q){flag=0;break;}}if(flag){printf("YES\n");ii=1;solve(1);for(int i=1; i<ii; i++){if(i==1)printf("%d",ans[i]);elseprintf(" %d",ans[i]);}printf("\n");}elseprintf("NO\n");}return 0;
}
CF_275_DIV2_D_Interesting Array相关推荐
- 老男孩上海校区Python面试题
python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...
- php recordarray,Array 数组 - [ php中文手册 ] - 在线原生手册 - php中文网
用户评论: [#1] florenxe [2015-10-07 18:53:45] //a nice little way to print leap years using array for ($ ...
- NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存
NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...
- array.array python yhzf
关于array: Python 本身没有数组这个说法, 有的就是list和tuple, list就具有其他语言中的数组特性. 至于list和tuple的区别,在于list可以在运行时修改内容和大小,t ...
- [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...
- hnswlib RuntimeError: Cannot return the results in a contigious 2D array. Probably ef or M is to sma
1. 问题现象 index = hnswlib.Index(space = '100', dim = 512) index.init_index(max_elements = 100, ef_cons ...
- Array 数组去重 总结10方法(7)
1,常规双循环去重(缺点:循环次数较多) Array.prototype.unique1 = function(){if(this === null){throw new TypeError('&qu ...
- ECMAScript——引用数据类型之array
array 转载于:https://www.cnblogs.com/cataway/p/4967058.html
- leetcode:Search in Rotated Sorted Array
题目要求: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
最新文章
- pandas生成新的累加数据列、pandas生成新的累加数据列(数据列中包含NaN的情况)、pandas计算整个dataframe的所有数据列的累加
- 转:PHP Liunx 服务安全防范方案
- 介绍一下python有趣的库-tqdm
- SQL2K数据库开发二十二之索引操作在视图上创建索引
- 【labelme】改造labelme
- hadoop学习笔记(二):centos7三节点安装hadoop2.7.0
- 较简单的字节输入流输出流拷贝文件
- 【小白冲冲冲!!!】37. ORBSLAM初始化时为什么要同时初始化H矩阵和F矩阵?
- 阅读之大量数据访问机器的架构优化
- BZOJ3669[NOI2014] 魔法森林
- 美团架构师探秘Java生态系统,介绍JDK、JVM、JEP
- 高质量解读《高性能mysql》——第1章 MySQL架构与历史
- Linux终端下载百度云,Linux终端使用wget下载百度云资源
- pascal 一些常用函数
- uniapp开发微信公众号调用微信授权登录
- NPN与PNP型传感器的区别
- 【安卓Android】VibratorService分析
- python学习之路1
- W3school导航条实现的两种方法
- 高仿小米商城项目,我爱了!