QUERIES



这个题解。。
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的更多相关文章
- 实践 HTML5 的 CSS3 Media Queries
先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...
- CSS3 Media Queries 实现响应式设计
在 CSS2 中,你可以为不同的媒介设备(如屏幕.打印机)指定专用的样式表,而现在借助 CSS3 的 Media Queries 特性,可以更为有效的实现这个功能.你可以为媒介类型添加某些条件,检测设 ...
- 使用CSS3 Media Queries实现网页自适应
原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...
- SQL Queries from Transactional Plugin Pipeline
Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...
- Media Queries 详解
Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码: <link href="css/reset.css" rel ...
- 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 ...
- 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 ...
- 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组
F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...
- CSS3 媒体查询移动设备尺寸 Media Queries for Standard Devices (包括 苹果手表 apple watch)
/* ----------- iPhone 4 and 4S ----------- */ /* Portrait and Landscape */ @media only screen and (m ...
随机推荐
- Profinet转EtherNet/IP网关连接AB PLC的应用案例
西门子S7-1500 PLC(profinet)与AB PLC以太网通讯(EtherNet/IP).本文主要介绍捷米特JM-EIP-PN的Profinet转EtherNet/IP网关,连接西门子S7- ...
- 端口探测神器——Nmap
Nmap 简介: 全称网络映射器,能快速扫描大型网络或单个网络上有哪些主机,这些主机提供什么服务,可以发现服务器运行在什么操作系统上,从而发现可攻击的脆弱点,扩大攻击范围 Nmap有图形化版本名叫Ze ...
- Git的基本操作(CUDR)及分支
## 安装 到Git官网下载,网站地址:https://git-scm.com/downloads 需要从网上下载一个,然后进行默认安装即可.安装完成后,在开始菜单里面找到 "Git --& ...
- 基于thumbnailator封装图片处理工具类,实现图片的裁剪、压缩、图片水印、文字水印、多行文字水印等功能
目录 一.前言 二.工具类的依赖和简单介绍 1.添加依赖 2.简单的使用 3.加载需要处理的图片 4.添加图片处理规则 4.1 Builder的方式 4.2 使用规则工厂的方式 5.输出处理后的图片 ...
- Chrome浏览器,有道云笔记的网页剪报需要多次登录且收藏失败报错
报错代码 {"canTryAgain":false,"scope":"SECURITY","error":"2 ...
- 利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理
有时候,我们在处理大量文档的时候,需要批量给Word文档添加印章处理,方便打印操作,本篇随笔介绍利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理. 1.利用Aspose. ...
- 信奥赛题1001:Hello,World!
这个题实在是太简单的了,无法比喻,直接付代码! //c++ #include<bits/stdc++.h> using namespace std; int main() { cout&l ...
- 语音合成技术3:HierVST: Hierarchical Adaptive Zero-shot Voice Style Transfer
HierVST: 分层自适应零样本语音风格转换 摘要: 尽管语音风格转换(VST)领域取得了快速进展,但最近的零样本VST系统仍然缺乏将新的说话者的语音风格进行转换的能力.在本文中,我们提出了Hier ...
- redis数据持久化之RDB和AOF
前言 redis虽然是内存缓存程序,但是可以将内存中的数据保存到硬盘上,从而实现数据保存.目前有两种redis数据持久化方式,分别是RDB和AOF. RDB模式 RDB之简介 RDB(redis da ...
- 文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题
二.如果用go语言,当数组A的所有元素都具有相同值时,QUICKSORT的时间复杂度是什么? 文心一言: 在Go语言中,对一个所有元素都相等的数组进行快速排序(QuickSort)的时间复杂度是O(n ...