Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations(线段树)
2016-07-26 10:16
507 查看
题目地址:http://codeforces.com/problemset/problem/339/D
思路:线段树。PushUp时根据层数奇数偶数判断使用|还是^
思路:线段树。PushUp时根据层数奇数偶数判断使用|还是^
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; #define maxn (1<<18) int a[maxn]; int sum[maxn<<2]; void PushUp(int rt,int dep) { if(dep) sum[rt] = sum[rt<<1]|sum[rt<<1|1]; else sum[rt] = sum[rt<<1] ^ sum[rt<<1|1]; } void build(int l,int r,int rt,int dep) { if(l==r) { sum[rt] = a[l]; return; } int mid = (l+r)>>1; build(l,mid,rt<<1,dep^1); build(mid+1,r,rt<<1|1,dep^1); PushUp(rt,dep); } void update(int p,int l,int r,int rt,int v,int dep) { if(l==r) { sum[rt]=v; return; } int mid = (l+r)>>1; if(p<=mid) update(p,l,mid,rt<<1,v,dep^1); else update(p,mid+1,r,rt<<1|1,v,dep^1); PushUp(rt,dep); } int main() { int n,m; scanf("%d%d",&n,&m); int cnt= 1<<n; for(int i=1;i<=cnt;i++) scanf("%d",&a[i]); build(1,cnt,1,n&1); for(int i=1;i<=m;i++) { int p,v; scanf("%d%d",&p,&v); update(p,1,cnt,1,v,n&1); printf("%d\n",sum[1]); } return 0; }
相关文章推荐
- Centos7 下mysql安装配置
- linux下获取帮助
- centos6.5安装ovs 2.5.0并解决db.sock问题
- Git 常用命令
- 链接地址学习笔记
- thinkphp的nginx配置
- arm linux 移植usb转串口驱动
- git bash客户端添加node_modules目录时,遇到长路径提示file name too long的解决方案
- HackRF One硬件架构及参数简介
- 电商实例、业务并发、网站并发及解决办法
- Linux中的文件描述符与打开文件之间的关系
- javaweb开发基础及Tomcat服务器的简单使用、配置
- Introduction to Apache JMeter
- CentOS里yum命令详解
- linux下.so的动态调试
- Linux命令的返回值
- 1044. Shopping in Mars (25)
- windows开启openssl
- 开启Centos系统的SSH服务
- -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory