CF339D
题目简化与分析:
题目翻译说的还是太复杂了,其实只是给你 $ n $ 个数,奇数位 \(\operatorname{or}\),偶数位 \(\operatorname{xor}\)。
- 会修改某个元素
- 查询修改后运算值
那我们很快就能想到线段树。
毕竟这是个板子。
与普通的板子不一样的就是,加和变成了或或异或。
Solution:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const int N=2e5+50;
const int M=1e5+50;
const int Mod=1e9+7;
inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
ll n,m;
ll a[N<<2],deep[N<<2];
ll ans[N<<2];
ll ls(int x){return x<<1;}
ll rs(int x){return x<<1|1;}
void push_up(int p){
if(deep[p]&1){
ans[p]=ans[ls(p)]|ans[rs(p)];
}else{
ans[p]=ans[ls(p)]^ans[rs(p)];
}
}
void build(ll p,ll l,ll r){
if(l==r){ans[p]=a[l];return;}
ll mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
deep[p]=deep[ls(p)]+1;
push_up(p);
}
void update(ll nx,ll ny,ll l,ll r,ll p,ll k){
if(nx<=l&r<=ny){
ans[p]=k;
return;
}
ll mid=(l+r)>>1;
if(nx<=mid) update(nx,ny,l,mid,ls(p),k);
if(ny>mid) update(nx,ny,mid+1,r,rs(p),k);
push_up(p);
}
int main()
{
n=read(),m=read();
n=(1<<n);
for(int i=1;i<=n;++i) a[i]=read();
build(1,1,n);
for(int i=1;i<=m;++i){
ll x,y;
x=read(),y=read();
update(x,x,1,n,1,y);
printf("%lld\n",ans[1]);
}
return 0;
}
CF339D的更多相关文章
- cf339d Xenia and Bit Operations
Xenia and Bit Operations Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
随机推荐
- MyBatis-plus乐观锁
什么是乐观锁呢?为什么要使用这个功能?这个功能能做什么呢?如何使用这个? 1.乐观锁( Optimistic Locking ) 是相对悲观锁而言的,乐观锁是假设认为数据一般情况下不会造成冲突,所以在 ...
- Python中使用支付宝支付
准备 # 支付宝文档 https://opendocs.alipay.com/open/270/105898?pathHash=b3b2b667 # 在沙箱环境下实名认证 https://openho ...
- 解决github网站打不开
方法一(此方法无效则选 方法二) 发现github经常打不开无法访问,最近尝试了下改host发现效果挺好,方法如下(windows电脑): 进入站长工具网站的域名解析网址:http://tool.ch ...
- 玩转AI二维码:揭秘我的漂亮二维码生成秘诀
这几天我又生成了很多漂亮的二维码图片,有了一些感受和想法,特总结此文,分享给大家.需要图片参数的同学可直接看文章最后,我生成了100多张不同风格的图片. 先看效果,喜欢的可以继续读下去. 背景 在这篇 ...
- Day04_Java_作业
A:选择题 1.下列哪个答案与show不是方法重载(b ). class Demo { void show(int a,int b,float c){} } A.void show(int a,flo ...
- 单行编辑控件不能有多行文本 matlab
单行编辑控件不能有多行文本 matlab 解决方法:双击进入控件,把max参数改2以及以上
- Redis核心技术与实践 03 | 高性能IO模型:为什么单线程Redis能那么快?
原文地址:https://time.geekbang.org/column/article/268262 个人博客地址:http://njpkhuan.cn/archives/redis-he-xin ...
- Pandas: title函数的作用
代码演示 将首字母大写,其余小写 效果演示 参考链接 https://www.w3resource.com/pandas/series/series-str-title.php
- 【go笔记】目录操作
基本目录操作 涉及:创建目录.重命名目录.删除目录 package main import ( "fmt" "os" "time" &quo ...
- filter() 函数的学习
1. filter() 函数 用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换.该接收两个参数, 第一个为函数,第二个为序列,序列的每个 ...