Codeforces Round #275 (div2) D Problem Solving report,

Source: Internet
Author: User

Codeforces Round #275 (div2) D Problem Solving report,

D. Interesting Arraytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output

We'll call an arrayNNon-negative integersA[1], bytesA[2], middle..., middleA[N] Interesting, if it meetsMConstraints.I-Th ofMConstraints consists of three integersLI,RI,QI(1 digit ≤ DigitLILimit ≤ limitRILimit ≤ limitN) Meaning that value shoshould be equalQI.

Your task is to find any interesting arrayNElements or state that such array doesn't exist.

ExpressionX&YMeans the bitwise AND of numbersXAndY. In programming ages C ++, Java and Python this operation is represented as "&", in Pascal-as "and ".

Input

The first line contains two integersN,M(1 digit ≤ DigitNLimit ≤ limit 105, 1 limit ≤ limitMMinimum ≤ limit 105)-the number of elements in the array and the number of limits.

Each of the nextMLines contains three integersLI,RI,QI(1 digit ≤ DigitLILimit ≤ limitRILimit ≤ limitN, 0 bytes ≤ bytesQIStatement <limit 230) describingI-Th limit.

Output

If the interesting array exists, in the first line print "YES" (without the quotes) and in the second line printNIntegersA[1], bytesA[2], middle..., middleA[N] (0 bytes ≤ bytesA[I] Condition <limit 230) decribing the interesting array. If there are multiple answers, print any of them.

If the interesting array doesn't exist, print "NO" (without the quotes) in the single line.

Sample test (s) input
3 11 3 3
Output
YES3 3 3
Input
3 21 3 31 3 2
Output
NO
Question:

Suppose there are n non-negative numbers, and now there are m restrictions. a [l] & a [l + 1] & a [l + 2]... & a [r] = q. According to the above restrictions, the output must meet the requirements of 1 ~ N number. If not, "NO" is output ".

Solution:

First, let's explore the meaning of the question and find out the known conditions for the question and what we want to output.

A [l] & a [l + 1] & a [l + 2]... & a [r] = q, which is the basic form of each restriction. We can know from "&" that if a bit in q is 1, a [l] ~ is required. The bit in a [r] is 1. This condition seems to be a limitation. Now, through conversion, it seems to be a known condition, that is, the bit in each a [I] must be 1.

We can see from the above that we get the basic value of each a [I], and then each restriction is an interval. It is easy to think of a line segment tree and query each restriction, check whether a conflict exists. If a conflict exists, it is "NO". If NO conflict exists, it is output according to the required value of a [I.

Code:

#include <cstdio>#include <cstring>#define Maxbit 29#define M_max 123456#define N_max 123456#define root 1, 1, nusing namespace std;const int noth = (1<<30)-1;int n, m;int l[M_max], r[M_max], q[M_max], a[N_max];int sum[N_max], tree[N_max*3];void build(int v, int l, int r) {if (l == r) {tree[v] = a[l];return;}int ls = v<<1, rs = ls+1, mid = (l+r)>>1;build(ls, l, mid);build(rs, mid+1, r);tree[v] = tree[ls] & tree[rs];}int query(int v, int l, int r, int ql, int qr) {if (r < ql || l > qr)  return noth;if (ql <= l && r <= qr)  return tree[v];int ls = v<<1, rs = ls+1, mid = (l+r)>>1;return query(ls, l, mid, ql, qr) & query(rs, mid+1, r, ql, qr);}void init() {scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++)scanf("%d%d%d", &l[i], &r[i], &q[i]);for (int i = 0; i <= Maxbit; i++) {memset(sum, 0, sizeof(sum));for (int j = 1; j <= m; j++)if ((q[j] >> i) & 1) {sum[l[j]]++;sum[r[j]+1]--;}for (int j = 1; j <= n; j++) {sum[j] += sum[j-1];if (sum[j] > 0)  a[j] |= 1 << i;}}build(root);}void solve() {for (int i = 1; i <= m; i++)if (query(root, l[i], r[i]) != q[i]) {printf("NO\n");return;}printf("YES\n");for (int i = 1; i <= n; i++)  printf("%d ", a[i]);printf("\n");}int main() {init();solve();}




Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.