codeforces 482B. Interesting Array【线段树区间更新】
题目:codeforces 482B. Interesting Array
题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val。
就是区间l---r上的与的值为val,最后问你原来的数组是多少?假设不存在输出no
分析:分析发现要满足全部的区间,而一个点上假如有多个区间的话,这个点的值就是全部区间或的值。由于仅仅有这样才干满足全部区间的。把全部位上的1都保存下来了。那么能够发现用线段树来维护,可是那么怎么推断满不满足条件呢?能够也用线段树,更新了之后在整个维护一遍看看满不满足题意。假设满足的话就能够了。
AC代码:
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int N = 110000;
struct Node
{
int l,r;
int val;
};
Node tree[10*N];
void build(int o,int l,int r)
{
tree[o].l = l,tree[o].r = r;
tree[o].val = 0;
if(l==r)
return ;
int mid = (l+r)/2;
build(o+o,l,mid);
build(o+o+1,mid+1,r);
}
void update(int o,int l,int r,int val)
{
if(tree[o].l==l && tree[o].r==r)
{
tree[o].val|=val;
return ;
}
int mid = (tree[o].l + tree[o].r)/2;
if(mid>=r)
update(o+o,l,r,val);
else if(l>mid)
update(o+o+1,l,r,val);
else
{
update(o+o,l,mid,val);
update(o+o+1,mid+1,r,val);
}
}
int query(int o,int l,int r)
{
if(tree[o].l==l && tree[o].r==r)
return tree[o].val;
int mid = (tree[o].l + tree[o].r)/2;
if(mid>=r)
return query(o+o,l,r);
else if(l>mid)
return query(o+o+1,l,r);
else
{
return query(o+o,l,mid)&query(o+o+1,mid+1,r);
}
}
vector<int> ans;
void solve(int o)
{
if(o!=1)
tree[o].val |= tree[o/2].val;
//printf("%d %d %d %d\n",o,tree[o].l,tree[o].r,tree[o].val);
if(tree[o].l==tree[o].r){
ans.push_back(tree[o].val);
return ;
}
solve(o+o);
solve(o+o+1);
}
Node a[N];
int main()
{
//freopen("Input.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
build(1,1,n);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].val);
update(1,a[i].l,a[i].r,a[i].val);
}
int ok=1;
for(int i=0;i<m;i++)
{
if(query(1,a[i].l,a[i].r)!=a[i].val)
{
ok=0;
break;
}
}
solve(1);
if(ok){
puts("YES");
for(int i=0;i<ans.size();i++)
printf("%d%c",ans[i],i==n?'\n':' ');
ans.clear();
}
else
puts("NO");
return 0;
}
codeforces 482B. Interesting Array【线段树区间更新】的更多相关文章
- Codeforces 482B Interesting Array(线段树)
题目链接:Codeforces 482B Interesting Array 题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是 ...
- CF#52 C Circular RMQ (线段树区间更新)
Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- POJ-2528 Mayor's posters (线段树区间更新+离散化)
题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
随机推荐
- Openfire与XMPP协议
关于xmpp协议可以参考:http://www.jabbercn.org 什么是OpenFire Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议. ...
- wso2esb安装及helloworld
1.系统环境 Ubuntu12.04 192.168.0.97 root/password找管理员 Ubuntu12.04 192.168.0.99 root/password ...
- eclipse 将javaWeb项目转化成maven项目
eclipse 将javaWeb项目转化成maven项目 CreateTime--2018年4月18日16:04:18 Author:Marydon 1.首先,maven项目的标准目录 2.web ...
- raise语句
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python学习手册 868 #raise语句 res=[IndexError,TypeError] #ra ...
- 17、JAVA流程控制
一.IF 1.第一种形式:if if(逻辑表达式){ 语句1; 语句2; ... } 当if中只有一条语句时,可以省略{} 2.第二种形式:if-else if(逻辑表达式){ 语句块1: } els ...
- java中的Checked Exception和Unchecked Exception的区别
Java 定义了两种异常: - Checked exception: 继承自 Exception 类是 checked exception.代码需要处理 API 抛出的 checked excepti ...
- java 和 C 代码运行效率的比较(整理)
最近和朋友无意间讨论起了 有关java 和C 的 效率问题, (我是java 推介者, 他是 c 语言推介者, 他做的是嵌入式) 故,想通过网络查询一下, 总结一下,两者到底效率如何,其有何差异,原因 ...
- linux 文件操作库函数
fopen :打开文件 fread :读文件 fwrite : 写文件 fgetc : 读字符 fputc : 写字符 fscanf : 格式化读 fprintf : 格式化写 fseek : 文件偏 ...
- 【laravel5.4】git上clone项目到本地,配置和运行 项目报错:../vendor/aotuload.php不存在
1.一般我们直接使用git clone 将git的项目克隆下来,在本地git库和云上git库建立关联关系 2.vendor[扩展]文件夹是不会上传的,那么下载下来直接运行项目,会报错: D:phpSt ...
- 【laravel54】关于用户权限认证RBAC和无限极分类
1.权限认证方面: https://packagist.org/packages/spatie/laravel-permission 用户认证 HTTP本身是无状态,通常在系统交互的过程中,使用账号或 ...