nyoj 华山论剑

来源:互联网 发布:战场概率射击 知乎 编辑:程序博客网 时间:2024/04/28 04:51
#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#define maxn 300100int n,m;int l,r,x;int a[maxn],tr[maxn * 4];void update(int l,int r,int id,int ll,int rr){    if(tr[id] == 1)  return; //1 说明这个区间都被击败了,就不用更新了     if(l == r)        {            if( tr[id] == 0 && l == ll &&  l != x)                {                    tr[id] = 1;                    a[l] = x;                //  printf("   %d %d\n",id,a[id]);                }            return ;        }    int mid = (l + r) / 2;    if( mid >= rr)        update(l, mid, id * 2, ll, rr);    else if( mid < ll)        update(mid+1, r, id * 2 + 1 , ll, rr);    else         {            update(l,    mid, id * 2,          ll, mid );            update(mid+1,  r, id * 2 + 1, mid + 1, rr);        }    tr[id] = tr[id*2] && tr[id*2+1];}int main(){    while( ~scanf("%d%d",&n,&m))    {        memset(a,0,sizeof(a));        memset(tr,0,sizeof(tr));        for(int i = 0; i < m; i ++)            {                scanf("%d%d%d",&l,&r,&x);                update(1, n, 1, l, r);            }        for(int i = 1; i <= n; i ++)            printf("%d ",a[i]);        printf("\n");    }    return 0;}
0 0