这个题解。。
u1s1我没看懂,但是我觉得这里面有一个重要的思想就是对于像异或这种最终值只是看一个数位的问题,我们可以考虑分解,把每一个子问题单独解决就可以了
其实更难的应该是每个子区间的异或和之和这个方面。。

这里放上dalao的代码

#include<bits/stdc++.h>
using namespace std;
const int N = 100009, M = 400009, Mod = 4001;
int n, m, a[N];
struct tree{int l0, l1, r0, r1, sum, val0, val1;} t[M][11];
tree merge(tree x, tree y) {
tree tmp = {};
tmp.val0 = x.val0 + y.val0 + x.r0 * y.l0 % Mod + x.r1 * y.l1 % Mod;
tmp.val1 = x.val1 + y.val1 + x.r0 * y.l1 % Mod + x.r1 * y.l0 % Mod;
if (x.sum == 0) tmp.l0 = x.l0 + y.l0, tmp.l1 = x.l1 + y.l1;
else tmp.l0 = x.l0 + y.l1, tmp.l1 = x.l1 + y.l0;
if (y.sum == 0) tmp.r0 = y.r0 + x.r0, tmp.r1 = y.r1 + x.r1;
else tmp.r0 = y.r0 + x.r1, tmp.r1 = y.r1 + x.r0;
tmp.val0 %= Mod, tmp.val1 %= Mod, tmp.l0 %= Mod, tmp.l1 %= Mod, tmp.r0 %=
Mod, tmp.r1 %= Mod, tmp.sum = x.sum ^ y.sum;
return tmp;
}
void change(int p, int l, int r, int k, int u, int v) {
if (l > u || r < u) return ;
if (l == r && l == u) {
if (v == 0) t[p][k].l0 = t[p][k].r0 = t[p][k].val0 = 1, t[p][k].l1 =
t[p][k].r1 = t[p][k].val1 = 0;
else t[p][k].l0 = t[p][k].r0 = t[p][k].val0 = 0, t[p][k].l1 = t[p][k].r1
= t[p][k].val1 = 1;
t[p][k].sum = v;
return ;
}
int mid = l + r >> 1;
change(p << 1, l, mid, k, u, v);
change(p << 1 | 1, mid + 1, r, k, u, v);
t[p][k] = merge(t[p << 1][k], t[p << 1 | 1][k]);
}
tree ask(int p, int l, int r, int k, int x, int y) {
if (y < l || x > r) return t[0][0];
if (x <= l && r <= y) return t[p][k];
int mid = l + r >> 1; return merge(ask(p << 1, l, mid, k, x, y), ask(p << 1 | 1, mid + 1, r, k, x,
y));
}
int power(int a, int b) {int res = 1; for (; b; b >>= 1, a = 1LL * a * a % Mod)
if (b & 1) res = 1LL * res * a % Mod; return res;}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) {
int x;
scanf("%d", &x);
for (int j = 1; j <= 10; ++ j) change(1, 1, n, j, i, x & (1 << j - 1));
}
while(m --) {
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (op == 1) for (int i = 1; i <= 10; ++ i) change(1, 1, n, i, x, y & (1
<< i - 1));
else {
int res = 0;
for (int i = 1; i <= 10; ++ i) res = (res + 1LL * ask(1, 1, n, i, x,
y).val1 * power(2, i - 1) % Mod) % Mod;
printf("%d\n", res);
}
}
return 0;
}

QUERIES的更多相关文章

  1. 实践 HTML5 的 CSS3 Media Queries

    先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...

  2. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  3. CSS3 Media Queries 实现响应式设计

    在 CSS2 中,你可以为不同的媒介设备(如屏幕.打印机)指定专用的样式表,而现在借助 CSS3 的 Media Queries 特性,可以更为有效的实现这个功能.你可以为媒介类型添加某些条件,检测设 ...

  4. 使用CSS3 Media Queries实现网页自适应

    原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...

  5. SQL Queries from Transactional Plugin Pipeline

    Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...

  6. Media Queries 详解

    Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码:  <link href="css/reset.css" rel ...

  7. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  8. SPOJ GSS1 Can you answer these queries I[线段树]

    Description You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A q ...

  9. 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组

    F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...

  10. CSS3 媒体查询移动设备尺寸 Media Queries for Standard Devices (包括 苹果手表 apple watch)

    /* ----------- iPhone 4 and 4S ----------- */ /* Portrait and Landscape */ @media only screen and (m ...

随机推荐

  1. JS逆向实战19——通杀webpack逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 aHR0cHM6Ly ...

  2. 使用libavcodec将mp3音频文件解码为pcm音频采样数据【[mp3float @ 0x561c1ec49940] Header missing】

    一.打开和关闭输入文件和输出文件 想要解决上面提到的问题,我们需要对mp3文件的格式有个大致了解,为了方便讲解,我这里画了个示意图: ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了 ID ...

  3. 给程序员准备的“蜜糍”--SOD框架简介

    注:本文是SOD框架源码仓库的首页介绍,原文地址 一.框架介绍 1,SOD框架是什么? 以前有一个著名的国产化妆品"大宝SOD密",SOD框架虽然跟它没有什么关系,但是名字的确受到 ...

  4. 大白话讲讲 Go 语言的 sync.Map(一)

    阅读本文大约需要 4.25 分钟. 程序是枯燥乏味的. 在讲 sync.Map 之前,我们先说说什么是 map(映射). 我们每个人都有身份证号码,如果我需要从身份证号码查到对应的姓名,用 map 存 ...

  5. FPGA移位加三法

    介绍 BCD码 BCD码的英文全称是Binary-Coded Decimal‎,简称BCD,按字面解释是二进制十进制代码,是一种二进制的数字编码形式. 常见的BCD码有8421BCD码,2421BCD ...

  6. Linux - vim文件编辑器

    vim 普通模式下 yy : 复制当前光标所在行 p : 粘贴 数字+yy :复制多行 dd :删除当前行 数字+dd :删除多行 u : 回滚 y$ : 光标到行结尾 y^ : 行开头到光标位置 y ...

  7. 关于reids免安装的使用与注意事项

    redis是我们现在常用的缓存数据库.可是redis官方网站只提供linux版本,而我们又习惯在windows系统上使用开发工具,这又怎么办呢? 幸好微软官方也提供了windows版本,方便根据实际需 ...

  8. Cilium系列-13-启用XDP加速及Cilium性能调优总结

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  9. Java程序员的MacBookPro(14寸M1)配置备忘录

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 欣宸的月俸虽然很低,但还是咬着牙攒够银子,入 ...

  10. chrome浏览器插件react devtools、redux devtools,无需安装、解压即可用

    react devtools用于调试react代码,可以查看到props.state的值,以及定义的hooks,而redux devtools可以追踪到action的派发.store的变化,两个都是r ...