题目
(此题有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 230−1 的非负整数表示 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,m≤1000。
对于另外30%的数据, p i ≤ 1 pi\leq1 pi≤1。
对于100%的数据, n , m ≤ 100000 , 1 ≤ l i ≤ r i ≤ n , 0 ≤ p i < 2 30 n,m\leq100000,1 \leq li\leq ri\leq n,0\leq pi<2^{30} n,m≤100000,1≤li≤ri≤n,0≤pi<230。
简要题意:
原题已经够简要了
p i ≤ 1 pi\leq1 pi≤1的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()