传送门

给定n,m,代表有2n个数,m次询问

每次询问时先将此时序列第p个数值改为b,在求序列的值。序列的值定义如下。

将序列中的第2*i项与2*i-1项或,得到新序列,再把新序列的第2*i项与2*i-1项做异或操作,再将新序列进行或操作,如此往复,最终得到一个数,称为序列的值

线段树水题

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define INF 0x3f3f3f3f
 5 using namespace std;
 6 typedef long long LL;
 7
 8 const int maxn = (1 << 17) + 5;
 9 int da[maxn * 4];
10 int n, m;
11 int p, b;
12
13 int n_;
14
15 void build() {
16     int op = 0;
17     int k = n_ + n_ - 2;
18     k = (k - 1) / 2;
19     int t = n;
20     while (k > 0) {
21         if (k == (1 << t) - 2) {op ^= 1;t--;}
22         if (op == 1) {
23             da[k] = da[k * 2 + 1] | da[k * 2 + 2];
24         } else {
25             da[k] = da[k * 2 + 1] ^ da[k * 2 + 2];
26         }
27         k--;
28     }
29 }
30
31 void update(int k, int val) {
32     k += n_ - 2;
33     da[k] = val;
34     int op = 0;
35     while (k > 0) {
36         k = (k - 1) / 2;
37         op = 1 - op;
38         if (op == 1) {
39             da[k] = da[k * 2 + 1] | da[k * 2 + 2];
40         } else {
41             da[k] = da[k * 2 + 1] ^ da[k * 2 + 2];
42         }
43     }
44 }
45
46 int main() {
47     scanf("%d%d", &n, &m);
48     n_ = (1 << n);
49     for (int i = 0; i < n_; i++) {
50         scanf("%d", da + n_ + i - 1);
51     }
52     build();
53     while (m--) {
54         scanf("%d%d", &p, &b);
55         update(p, b);
56         printf("%d\n", da[0]);
57     }
58     return 0;
59 }

转载于:https://www.cnblogs.com/xFANx/p/8782870.html

Codeforces-339D. Xenia and Bit Operations相关推荐

  1. 线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)

    Codeforces 339D Xenia and Bit Operations vj地址 题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的 ...

  2. [codeforces 339]D. Xenia and Bit Operations

    [codeforces 339]D. Xenia and Bit Operations 试题描述 Xenia the beginner programmer has a sequence a, con ...

  3. Codeforces Round #197 (Div. 2): D. Xenia and Bit Operations(线段树)

    题意:定义一个长度2^n的序列{a1, a2-an},序列相邻两个元素或运算之后再进行异或运算再进行或运算(两种运算交替进行)直到只剩下一个数字,这个数字即为序列的值,输入第一行两个数n,m表示序列的 ...

  4. CodeForces - 1337D Xenia and Colorful Gems(二分)

    题目链接:点击查看 题目大意:给出三个序列分别记为 a,b,c,现在要求分别从三个序列中找出 x , y , z ,使得 ( x - y )^2 + ( y - z )^2 + ( y - z )^2 ...

  5. codeforces 1395C Boboniu and Bit Operations(思维)

    题目 题意:给出一个长度为n的数组a,和一个长度为m的数组,要求得到一个长度为n的数组c,使得数组c里面的每个元素执行"或"操作,得到的数组最小,其中c中的每一个元素为a中的每个元 ...

  6. CF339D Xenia and Bit Operations(线段树)

    乱搞线段树,单点修改,每次询问整个表达式的值 不同点在于up函数需要进行修改,根据区间长度不同运算符号也有所不同 代码: #include <bits/stdc++.h> #define ...

  7. codeforces数学1700[CodeForces 1336B[分类讨论+二分]CodeForces - 1301C[组合计数的减法原理]]

    CodeForces 1336B Xenia and Colorful Gems 题目大意:给你nrn_rnr​个xix_ixi​,ngn_gng​个yiy_iyi​,nbn_bnb​个ziz_izi ...

  8. C. Divan and bitwise operations

    Problem - C - Codeforces C. Divan and bitwise operations time limit per test 1 second memory limit p ...

  9. CF 2022寒假练习

    CF 2022寒假练习 CF_2A Winner 链接 CF_2A Winner 题目大意 有一个游戏,由nnn个玩家参与,每一轮会有一个玩家获得sss点数.游戏最后一轮结束后,点数最多的玩家获胜.如 ...

最新文章

  1. PyTorch | (2)PyTorch 入门-张量
  2. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章
  3. 多看系统下载_漫画迷手机必备,「漫画之家」全网漫画随意看
  4. mybatis关联配置(一对多配置)
  5. c语言出圈游戏课设报告,c语言作业 出圈游戏
  6. 面向对象六大原则详解
  7. 摩托罗拉edge S30冠军版再次开售:512GB超大存储 1GB不到5元钱!
  8. 【转载】谁动了摩卡的奶酪?
  9. Surface 内置原生壁纸下载
  10. 高大上的cmd命令行来袭!颜值与内涵兼备
  11. 手把手教你如何安装水晶易表——靠谱的安装教程
  12. Routing and Switching Essentials ( 版本 6.00) - RSE 6.0 Chapter 5 Exam
  13. Android 音视频采集与软编码总结
  14. 这是我见过最接地气的PCB设计指南了!
  15. Ubuntu18.04 同一个程序显示两个图标,收藏夹图标不合并问题解决
  16. Java面试题2017版
  17. 各个厂商手机不打印log日志的解决方法
  18. 中国天气预报城市代码
  19. wxpython后台线程更新界面控件方法
  20. 数据采集之全埋点数据采集分析方法的一些整理

热门文章

  1. 开始用Tornado:从Hello World开始
  2. 易语言窗口c_句柄取进程名,易语言窗口句柄取进程文件名源码
  3. rust怎么关阳光指令_我家也有庭院多好,伸缩阳光房装上,能休闲能当车库,还不算违建...
  4. 别让for循环毁了你的程序(二)
  5. php7 编译 pdo mysql_php7 编译 pdo_mysql 问题, [mysql_driver.lo] Error 1
  6. MMKV_微信MMKV源码分析(一) | 整体流程
  7. 一个简单字符型设备驱动及其测试
  8. 【Flink】Disconnect from JobManager responsible for
  9. 【Elasticsearch】如何构建一个好的电商搜索引擎?
  10. 【Kafka】kafka 客户端 控制台 flink 都无法消费的情况