某NOIP模拟赛 T2 位运算(or)

博客介绍了如何解决一个NOIP模拟赛中的位运算题目,涉及利用线段树处理区间条件,包括针对不同数据规模的解法:30%的数据通过区间清零和查询,50%的数据采用30棵线段树,100%的数据使用一棵线段树处理所有位。
摘要由CSDN通过智能技术生成

题目

(此题有SPJ)

【描述】

构造一个长度为$ n 的 非 负 整 数 序 列 的非负整数序列 x$,满足 m m m个条件,第 i i i个条件为

x [ l i ] ∣ x [ l i + 1 ] ∣ … ∣ x [ r i ] = p i x[l_i] | x[l_i+1] | … | x[r_i]=p_i x[li]x[li+1]x[ri]=pi

【输入】

第一行两个整数 n , m n,m n,m。接下来 m行每行三个整数 l i , r i , p i li,ri,pi li,ri,pi

【输出】

如果存在这样的序列$ x$,第一行输出 Yes,第二行输出 $n $个不超过 2 30 − 1 2^{30}-1 2301 的非负整数表示 x [ 1 ] . . . x [ n ] x[1]...x[n] x[1]...x[n],否则输出一行No

【输入样例1】

2 1 
1 2 1

【输出样例1】

Yes
1 1

【子任务】

对于30%的数据, n , m ≤ 1000 n,m\leq 1000 n,m1000

对于另外30%的数据, p i ≤ 1 pi\leq1 pi1

对于100%的数据, n , m ≤ 100000 , 1 ≤ l i ≤ r i ≤ n , 0 ≤ p i &lt; 2 30 n,m\leq100000,1 \leq li\leq ri\leq n,0\leq pi&lt;2^{30} n,m100000,1lirin,0pi<230

简要题意:原题已经够简要了


p i ≤ 1 pi\leq1 pi1的30%解

第一反应时这个解。

假如他要求第 l i l_i li r i r_i ri或起来为0,代表它们都为0,否则只要有一个为1即可。

故开一个线段树,支持区间清零,区间查询或,初始化所有为1。

每次 x = 0 x=0 x=0,区间清零;

x = 1 x=1 x=1,留着在所有操作后确认是否符合这些限制。

代码:

#include<bits/stdc++.h>
using namespace std;
int getint()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值