博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 482B Interesting Array(线段树)
阅读量:6120 次
发布时间:2019-06-21

本文共 1989 字,大约阅读时间需要 6 分钟。

题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是

否有满足的数列。

解题思路:线段树维护。每条限制等于是对l~r之间的数或上q(取且的性质,对应二进制位一定为1)。那么处理全然部的

限制。在进行查询。查询相应每一个l~r之间的数取且是否还等于q。所以用线段树维护取且和。改动为或操作。

#include 
#include
#include
using namespace std;const int maxn = 1e5 + 5;const int INF = (1<<30)-1;#define lson(x) ((x)<<1)#define rson(x) (((x)<<1)|1)int lc[maxn << 2], rc[maxn << 2], set[maxn << 2], val[maxn << 2];inline void maintain (int u, int w) { val[u] |= w; set[u] |= w;}inline void pushup(int u) { val[u] = val[lson(u)] & val[rson(u)];}inline void pushdown(int u) { if (set[u]) { maintain(lson(u), set[u]); maintain(rson(u), set[u]); set[u] = 0; }}void build (int u, int l, int r) { lc[u] = l; rc[u] = r; set[u] = val[u] = 0; if (l == r) return; int mid = (lc[u] + rc[u]) >> 1; build(lson(u), l, mid); build(rson(u), mid + 1, r); pushup(u);}void modify(int u, int l, int r, int w) { if (l <= lc[u] && rc[u] <= r) { maintain(u, w); return; } pushdown(u); int mid = (lc[u] + rc[u]) >> 1; if (l <= mid) modify(lson(u), l, r, w); if (r > mid) modify(rson(u), l, r, w); pushup(u);}int query(int u, int l, int r) { if (l <= lc[u] && rc[u] <= r) return val[u]; pushdown(u); int mid = (lc[u] + rc[u]) >> 1, ret = INF; if (l <= mid) ret &= query(lson(u), l, r); if (r > mid) ret &= query(rson(u), l, r); pushup(u); return ret;}int N, M, L[maxn], R[maxn], Q[maxn];bool judge() { for (int i = 0; i < M; i++) if (query(1, L[i], R[i]) != Q[i]) return true; printf("YES\n"); for (int i = 1; i <= N; i++) printf("%d%c", query(1, i, i), i == N ?

'\n' : ' '); return false; } int main () { scanf("%d%d", &N, &M); build(1, 1, N); for (int i = 0; i < M; i++) { scanf("%d%d%d", &L[i], &R[i], &Q[i]); modify(1, L[i], R[i], Q[i]); } if (judge()) printf("NO\n"); return 0; }

转载地址:http://txgka.baihongyu.com/

你可能感兴趣的文章
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>
实验吧 recursive write up
查看>>
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>