【GDKOI2016】 魔卡少女 线段树
题目大意:给你一个长度为n的序列${a_1....a_n}$,有$m$次操作
每次操作有两种情况:修改$a_i$的值,询问$[l,r]$中所有子区间的异或和。
数据范围:$n,m≤10^5$,$a_i≤1000$。
对于序列$a$,我们对每一个二进制位开一个线段树,对于每个节点,我们存储六个值:
$sum$:该区间内所有位的异或和。
$ans$:该区间内所有子区间异或和为1的数量。
$l_0$:该区间内以区间左端点为起点的所有区间中,异或和为0的区间数量。
$l_1$:该区间内以区间左端点为起点的所有区间中,异或和为1的区间数量。
$r_0$:该区间内以区间右端点为起点的所有区间中,异或和为0的区间数量。
$r_1$:该区间内以区间右端点为起点的所有区间中,异或和为1的区间数量。
关于pushup的过程,可以参考代码。
然后随便搞一搞就没了。
#include<bits/stdc++.h>
#define M 400005
#define L long long
#define MOD 100000007
using namespace std; struct node{
int l[],r[];L sum,ans;
node(){l[]=l[]=r[]=r[]=sum=ans=;}
node(int x){
l[]=r[]=sum=ans=x;
l[]=r[]=x^;
}
friend node operator +(node a,node b){
node c;
c.sum=a.sum^b.sum;
c.l[]=a.l[]+b.l[a.sum];
c.l[]=a.l[]+b.l[a.sum^];
c.r[]=a.r[b.sum]+b.r[];
c.r[]=a.r[b.sum^]+b.r[];
c.ans=a.ans+b.ans+1LL*a.r[]*b.l[]+1LL*a.r[]*b.l[];
return c;
}
};
struct seg{
node a[M];
void updata(int x,int lc,int rc,int k,int op){
if(lc==rc) return void(a[x]=node(op));
int mid=(lc+rc)>>;
if(k<=mid) updata(x<<,lc,mid,k,op);
else updata(x<<|,mid+,rc,k,op);
a[x]=a[x<<]+a[x<<|];
}
node query(int x,int lc,int rc,int ll,int rr){
if(ll<=lc&&rc<=rr) return a[x];
int mid=(lc+rc)>>;
node res;
if(ll<=mid) res=res+query(x<<,lc,mid,ll,rr);
if(mid<rr) res=res+query(x<<|,mid+,rc,ll,rr);
return res;
}
}p[];
int n,m;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
int x; scanf("%d",&x);
for(int j=;j<;j++)
p[j].updata(,,n,i,(x>>j)&);
}
scanf("%d",&m);
while(m--){
char op[]; int x,y;
scanf("%s%d%d",op,&x,&y);
if(op[]=='Q'){
L ans=;
for(int j=;j<;j++){
node res=p[j].query(,,n,x,y);
ans+=res.ans<<j;
}
printf("%lld\n",ans%MOD);
}else{
for(int j=;j<;j++)
p[j].updata(,,n,x,(y>>j)&);
}
}
}
【GDKOI2016】 魔卡少女 线段树的更多相关文章
- 魔卡少女(cardcaptor)——线段树
题目 [题目描述] 君君是中山大学的四年级学生.有一天在家不小心开启了放置在爸爸书房中的一本古书.于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地.这时 ...
- 【JZOJ4359】【GDKOI2016】魔卡少女
题目描述 君君是中山大学的四年级学生.有一天在家不小心开启了放置在爸爸书房中的一本古书.于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地.这时一只看上去 ...
- suoi37 清点更多船只 (卡空间线段树)
sbw巨佬的卡空间方法,把线段树的叶节点只记到长度为16的区间,然后在叶节点上暴力修改查询,这样点数是$\frac{N}{8}$的,可以过... orz #include<bits/stdc++ ...
- BZOJ.2212.[POI2011]Tree Rotations(线段树合并)
题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...
- 【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和
题意:给出N个数,M个操作.操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续子区间的异或和.n,m<=100000,ai<=1000 题解: 当年(其实也就是 ...
- BZOJ4399 魔法少女LJJ【线段树合并】【并查集】
Description 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了 LJJ感叹道"这里真是个迷人的绿色世界,空气清新.淡雅 ...
- 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并
题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉人的奶浆味: ...
- 【BZOJ4399】魔法少女LJJ 线段树合并
[BZOJ4399]魔法少女LJJ Description 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的 ...
- Codeforces Gym100543B 计算几何 凸包 线段树 二分/三分 卡常
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543B.html 题目传送门 - CF-Gym100543B 题意 给定一个折线图,对于每一条 ...
随机推荐
- 2018.10.23 NOIP模拟 “新”的家园(缩图+dijksta/spfa)
传送门 考试70分骗分写挂了=30分=全场最低. 哎今天230垫底了. 这题出的挺好. 对于非关键点直接缩点. 每次把要查的insertinsertinsert进缩好的图里面跑spfa/dijkstr ...
- 2018.10.09 NOIP模拟 世界杯(图论+set优化)
传送门 貌似是防akakak题? 不是很清楚. 事实上如果两个人没有严格的大小关系,我们给他们两个连一条边. 这样可以构成很多连通块. 而且对于连通块a,ba,ba,b,aia_iai和bjb_jb ...
- 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)
传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...
- python操作数据库-数据表
数据表: 数据类型: 帮助的三种形式: 在cmd中输入: help 要帮助的主题词,或 ? 要帮助的主题词 或 \h 要帮助的主题词 . 数据表的创建: CREATE database IF NOT ...
- GitHub 安装配置
1:到 Github 注册 页面中注册,填写用户名.邮箱和密码 选择免费服务 步骤三可以根据自身喜好勾选或者直接跳过 2.1.2 创建远程仓库 创建完账号后,可以开始创建仓库 但是这里我们还没有验证邮 ...
- 深入浅析JavaScript中with语句的理解
JavaScript 有个 with 关键字, with 语句的原本用意是为逐级的对象访问提供命名空间式的速写方式. 也就是在指定的代码区域, 直接通过节点名称调用对象. with语句的作用是暂时改变 ...
- SpringMVC零碎笔记
在web.xml里可以配置webapp的默认首页,格式如下: <welcome-file-list> <welcome-file>index.html</welcome- ...
- Codeforces805B. 3-palindrome 2017-05-05 08:33 156人阅读 评论(0) 收藏
B. 3-palindrome time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- PAT 甲 1005. Spell It Right (20) 2016-09-09 22:53 42人阅读 评论(0) 收藏
1005. Spell It Right (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given ...
- springmvc 开涛 拦截器
拦截器有三个方法:preHandle, postHandle, afterCompletion ***-servlet.xml <bean name="/test" clas ...