【Luogu】P3760异或和(权值树状数组)
再次声明以后我见到位运算一定第一时间想把它拆成每一位算
本题就是有个前缀和sum[],然后让你求每一位有多少对i,j满足sum[i]-sum[j]在那一位上是1
考虑怎样才能减出1来
如果sum[i]在这一位是1的话,那么就需要j是0且sum[i]前面的数小于sum[j]前面的数,这样不至于一减减退位了,把sum[i]这一位的1减没了
如果是0同理
考虑用权值树状数组维护。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<cstdlib>
#define maxn 1000010
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} inline int low(int x){ return x&(-x); } int tot;
int sum[maxn]; struct Tree{
int tree[maxn];
void clear(){ memset(tree,,sizeof(tree)); }
inline void add(int pos){
while(pos<=tot){
tree[pos]++;
pos+=low(pos);
}
}
inline int ask(int pos){
int ans=;
while(pos>){
ans+=tree[pos];
pos-=low(pos);
}
return ans;
}
}zero,one; int main(){
int n=read();
for(int i=;i<=n;++i) sum[i]=sum[i-]+read();
tot=sum[n]+;
int ans=;
for(int i=;(<<i)<=tot;++i){
zero.clear();one.clear();
int cnt=;
zero.add();
for(int j=;j<=n;++j){
int now=(sum[j]%(<<i))+;
if(((sum[j]>>i)&)==){
cnt+=zero.ask(now);
cnt+=one.ask(tot)-one.ask(now);
one.add(now);
}
else{
cnt+=zero.ask(tot)-zero.ask(now);
cnt+=one.ask(now);
zero.add(now);
}
}
//printf("%d %d\n",i,cnt);
if(cnt&) ans+=<<i;
}
printf("%d",ans);
return ;
}
【Luogu】P3760异或和(权值树状数组)的更多相关文章
- 权值树状数组 HDU-2852 KiKi's K-Number
引入 权值树状数组就是数组下标是数值的数组,数组存储下标对应的值有几个数 题目 HDU-2852 KiKi's K-Number 题意 几种操作,p=0代表push:将数值为a的数压入盒子 p=1代表 ...
- BZOJ4888 [Tjoi2017]异或和 FFT或树状数组+二进制拆位
题面 戳这里 简要题解 做法一 因为所有数的和才100w,所以我们可以直接求出所有区间和. 直接把前缀和存到一个权值数组,再倒着存一遍,大力卷积一波. 这样做在bzoj目前还过不了,但是luogu开O ...
- 【BZOJ 1901】【Zju 2112】 Dynamic Rankings 动态K值 树状数组套主席树模板题
达神题解传送门:http://blog.csdn.net/dad3zz/article/details/50638360 说一下我对这个模板的理解: 看到这个方法很容易不知所措,因为动态K值需要套树状 ...
- [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...
- 【Luogu】P3157动态逆序对(树状数组套主席树)
题目链接 md第一道在NOILinux 下用vim做的紫题.由于我对这个操作系统不是很熟悉,似乎有什么地方搞错了,md调死.(我还打了两遍代码,调了两个小时) 但是这道题并不难,就是树状数组套上主席树 ...
- 【Luogu】P1972HH的项链(链表+树状数组)
题目链接 难题,所以会讲得细一些. 首先我们想如何统计区间[l,r]内不同贝壳的个数. 第一个思路就是线段树/树状数组,query(1,r)-query(1,l-1)对不对? 然而这样是不对的. 然后 ...
- luogu 5311 [Ynoi2011]D1T3 动态点分治+树状数组
我这份代码已经奇怪到一定程度了~ 洛谷上一直 $TLE$,但是本地造了几个数据都过了. 简单说一下题解: 先建出来点分树. 对于每一个询问,在点分树中尽可能向上跳祖先,看是否能够处理这个询问. 找到最 ...
- BZOJ.4888.[TJOI2017]异或和(树状数组)
BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...
- BZOJ4888 [Tjoi2017]异或和 【树状数组】
题目链接 BZOJ4888 题解 要求所有连续异或和,转化为任意两个前缀和相减 要求最后的异或和,转化为求每一位\(1\)的出现次数 所以我们只需要对每一个\(i\)快速求出\(sum[i] - su ...
随机推荐
- cocos2dx 修改亮度、对比度、色调、饱和度
废话少说,直接修改CCSprite使用的片面着色器ccShader_PositionTextureColor_noMVP.frag: /* * cocos2d for iPhone: http://w ...
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...
- 经典sql语句汇总
1,某条数据放首位,其他倒序并分页 select * from Student order by( case when id='2' then 1 ELSE 4 END),id desc l ...
- 聊聊我这两年都在忙什么,IT技术男如何转型!
从09年开始,从事软件测试工作:至今六年有余: 从当初的简单的功能测试,到后来的整体系统测试,性能测试,至公司测试负责人: 我常常在想,IT技术男,有哪些转型机会,是不是得一辈子从事测试这个职业(注: ...
- 自定义扩展Compare比较方法
public static int Compare<T, V>(this T x, T y, Func<T, V> func) { return Comparer<V&g ...
- tcl之控制流-for
- PAT (Basic Level) Practice 1023 组个最小数
个人练习 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...
- ZOJ3640 概率DP
Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...
- Background Segment CNT
CNT简介 CNT算法是OpenCV Contrib 模块中的背景减除(Background segment)算法之一.相较于OpenCV提供的其他背景减 除算法,该算法具有运行速度快,检测精度高等优 ...
- android stadio svn 使用技巧
有时候有这样的需求: 就是我一次要改很多的需求,然后代码要分开提交,那么怎么办? 提交的时候一个一个的点开看? 比如:这次改的还没有提上去,又来了一个需求,怎么区分呢 新建一个active的变化列表 ...