Codeforces Round #275 (Div. 2) D
题意 : 一个数组 给出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") ;
}
}
}
Codeforces Round #275 (Div. 2) D的更多相关文章
- Codeforces Round #275 (Div. 2) C - Diverse Permutation (构造)
题目链接:Codeforces Round #275 (Div. 2) C - Diverse Permutation 题意:一串排列1~n.求一个序列当中相邻两项差的绝对值的个数(指绝对值不同的个数 ...
- Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造
Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 ht ...
- 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
题目传送门 /* 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 这样保证不会超出边界并且以防其余的数相邻绝对值差>k */ /*** ...
- [Codeforces Round #275 (Div. 2)]B - Friends and Presents
最近一直在做 codeforces ,总觉得已经刷不动 BZOJ 了? ——真是弱喵 你看连 Div.2 的 B 题都要谢谢题解,不是闲就是傻 显然我没那么闲 ╮(╯_╰)╭ 我觉得这题的想法挺妙的~ ...
- Codeforces Round #275 (Div. 2) C
题目传送门:http://codeforces.com/contest/483/problem/C 题意分析:题目意思没啥好说的. 去搞排列列举必须TLE.那么就想到构造. 1.n.2.n-1.3.n ...
- Codeforces Round #275(Div. 2)-C. Diverse Permutation
http://codeforces.com/contest/483/problem/C C. Diverse Permutation time limit per test 1 second memo ...
- Codeforces Round #275 (Div. 2)-A. Counterexample
http://codeforces.com/contest/483/problem/A A. Counterexample time limit per test 1 second memory li ...
- Codeforces Round #275 Div.1 B Interesting Array --线段树
题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的 ...
- Codeforces Round #275 (Div. 2)
A. Counterexample 题意:给出l,r,找出使得满足l<a<b<c<r,同时满足a,b的最大公约数为1,b,c的最大公约数为1,且a,b的最大公约数不为1 因为题 ...
- Codeforces Round #275 (Div. 2) 题解
A 题: 说的是在(LR) 之间找出ab互质 bc 互质 ac 不互质的 3个数 数据量小直接暴力 #include <iostream> #include <cstdio> ...
随机推荐
- java MD5工具类
package com.common.tools; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * @a ...
- 【BZOJ3083/3306】遥远的国度/树 树链剖分+线段树
[BZOJ3083]遥远的国度 Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了 ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- jQuery插件——1.编写规则
jQuery插件编写规则如下: 1.命名规则:jquery.[插件名称].js 2.所有对象方法都应当附加到jQuery.fn对象上:所有的全局方法都应当附加到jQuery对象上. 3.在插件内部,t ...
- 基于HttpClient、Jsoup的爬虫获取指定网页内容
不断尝试,发现越来越多有趣的东西,刚刚接触Jsoup感觉比正则表达式用起来方便,但也有局限只适用HTML的解析. 不能尝试运用到四则运算中(工作室刚开始联系的小程序). 在原来写的HttpClient ...
- 斯坦福大学Andrew Ng - 机器学习笔记(3) -- 神经网络模型
大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...
- 小程序发送 request请求失败 提示不在合法域名列表中的解决方法
可以在小程序开发工具中设置不校验域名.
- Ubuntu出现Authentication failure(认证失败)的解决方法(转)
当我们想在刚安装的Linux系统启动某些服务或者想进入root用户时提示认证失败或者权限不够时,原因是刚安装Ubuntu后,root用户默认是未激活的,不允许登录,也不允许使用su命令到转到root用 ...
- 剑指offer 面试12题
面试12题: 题目:矩阵中的路径 题:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格 ...
- MVC4 中使用 Area 和 注意的地方
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰. 步骤如下: 项目 –> 添加 -> 区域 (Area) 输入 Admin 添加成功后 Area包含:创建一个空 ...