codeforces 482B Interesting Array 线段树
2014-10-27 12:06
344 查看
传送门:cf 482B
长度为n的数组,现在要求li到ri的值相与值为qi,问是否存在这样的数组
每一段相与为q时,对应位置对应位上的值必须为1,于是把对应位的值赋1,初步得到一个数组
然后利用线段判断对应段的值与q是否相等,
长度为n的数组,现在要求li到ri的值相与值为qi,问是否存在这样的数组
每一段相与为q时,对应位置对应位上的值必须为1,于是把对应位的值赋1,初步得到一个数组
然后利用线段判断对应段的值与q是否相等,
/****************************************************** * File Name: b.cpp * Author: kojimai * Create Time: 2014年10月26日 星期日 15时59分48秒 ******************************************************/ #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> using namespace std; #define FFF 100005 int flag[FFF],l[FFF],r[FFF],q[FFF],a[FFF]; struct node { int l,r,v; }p[FFF*4]; void build(int l,int r,int num) { p[num].l = l;p[num].r = r; p[num].v = -1; if(l == r) { p[num].v = a[l]; return; } int mid = (l+r) >> 1; build(l,mid,num*2); build(mid+1,r,num*2+1); } int query(int l,int r,int num) { int mid = (p[num].l+p[num].r) >> 1; if(p[num].l == l &&p[num].r == r) { if(p[num].v != -1) return p[num].v; else { p[num].v = query(l,mid,num*2)&query(mid+1,r,num*2+1); return p[num].v; } } if(r<=mid) return query(l,r,num*2); else if(l>mid) return query(l,r,num*2+1); else { int ans = query(l,mid,num*2); ans = ans & query(mid+1,r,num*2+1); return ans; } } int main() { int n,m; cin>>n>>m; memset(a,0,sizeof(a)); for(int i = 0;i < m;i++) cin>>l[i]>>r[i]>>q[i]; for(int bit = 0; bit < 30;bit++) { memset(flag,0,sizeof(flag)); for(int i = 0; i < m;i++) { if((1<<bit)&q[i]) { flag[l[i]-1]++; flag[r[i]]--; } } int now = 0; for(int i = 1;i <= n;i++) { now += flag[i-1]; if(now > 0) a[i] |= (1<<bit); } } build(1,n,1); bool flag = true; for(int i = 0;i < m && flag;i++) { if(query(l[i],r[i],0) != q[i]) flag = false; } if(flag) { printf("YES\n"); for(int i = 1;i <= n;i++) { if(i<n) printf("%d ",a[i]); else printf("%d\n",a[i]); } } else printf("NO\n"); return 0; }
相关文章推荐
- Codeforces 558E A Simple Task (计数排序+线段树优化)
- Codeforces 438D The Child and Sequence - 线段树
- hdoj 4288 && Codeforces 85D Coder 【线段树】
- codeforces 271E 离散化+线段树,dp优化
- Codeforces 838B. Diverging Directions (LCA+线段树, IndiaHacks 2nd Elimination 2017 )
- Codeforces 718C Sasha and Array(线段树维护矩阵)
- CodeForces - 668D Little Artem and Time Machine(线段树||树状数组)
- CodeForces - 343D_Water Tree_线段树维护dfs序
- CodeForces 498 D.Traffic Jams in the Land(线段树)
- CF Codeforces 52C 简单的线段树 成段更新
- Codeforces 295A Greg and Array 线段树区间累加,单点询问
- CodeForces 339D Xenia and Bit Operations 线段树
- CodeForces 573D Bear and Cavalry(线段树优化dp)
- codeforces 482 B Interesting Array 线段树区间更新
- 【CodeForces】343D Water tree (线段树好题!还未弄懂)
- codeforces 19D(线段树的应用)
- CodeForces 19D Points(离散化+线段树+单点更新)
- CodeForces 85D Sum of Medians (线段树)
- 【线段树】Codeforces 437B The Child and Set
- Codeforces 831-E.Cards Sorting(线段树)