Skip to content

482B

Solution

#include <cstdio>
#include <algorithm>
using namespace std;

#define MAX_M 100005
#define MAX_N 100005
#define MAX_BIT_NUM 40
#define D(x) x

struct Condition
{
    int l, r, q;
}condition[MAX_M];

int n, m;
int seq[MAX_N][MAX_BIT_NUM];
int delta[MAX_N][MAX_BIT_NUM];
int sum[MAX_N][MAX_BIT_NUM];

void input()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        condition[i].l = a;
        condition[i].r = b;
        condition[i].q = c;
    }
}

int get_bit(int l, int r, int pos)
{
    int temp = sum[r][pos] - sum[l - 1][pos] - (r - l + 1);
    if (temp == 0)
        return 1;
    return 0;
}

int work()
{
    for (int i = 0; i < m; i++)
    {
        int q = condition[i].q;
        for (int j = 0; q; q >>= 1, j++)
        {
            if (q & 1)
            {
                delta[condition[i].l][j] += 1;
                delta[condition[i].r + 1][j] += -1;
            }
        }
    }

    int temp[MAX_BIT_NUM];
    fill(temp, temp + MAX_BIT_NUM, 0);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j < MAX_BIT_NUM; j++)
        {
            temp[j] += delta[i][j];
            if (temp[j])
            {
                seq[i][j] = 1;
            }
            sum[i][j] = sum[i - 1][j] + seq[i][j];
        }
    }

    for (int i = 0; i < m; i++)
    {
        int q = condition[i].q;
        for (int j = 0; j <= 30; j++, q >>= 1)
        {
            if (get_bit(condition[i].l, condition[i].r, j) != (q & 1))
            {
                return false;
            }
        }
    }
    return true;
}

int get_value(int pos)
{
    int ret = 0;
    for (int i = 30; i >= 0; i--)
    {
        ret = (ret << 1) + seq[pos][i];
    }
    return ret;
}

void output()
{
    printf("%d", get_value(1));
    for (int i = 2; i <= n; i++)
    {
        printf(" %d", get_value(i));
    }
    puts("");
}

int main()
{
    input();
    if (work())
    {
        puts("YES");
        output();
    }else
    {
        puts("NO");
    }
    return 0;
}