bryce1010专题训练——树状数组
Bryce1010模板
1、一维树状数组
https://vjudge.net/contest/239647#problem/A【HDU1556】
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=1e5+10;
int n,c[MAXN<<1];
//表示二进制x的最末尾的一个1
int lowbit(int x)
{
return x&(-x);
}
//区间求和
int getSum(int x)
{
int ans=0;
while(x<=n)
{
ans+=c[x];
x+=lowbit(x);
}
return ans;
}
//更新节点
void update(int pos,int val)
{
while(pos>0)
{
c[pos]+=val;
pos-=lowbit(pos);
}
}
int main()
{
int a,b;
while(cin>>n)
{
memset(c,0,sizeof(c));
for(int i=0;i<n;i++)
{
cin>>a>>b;
update(b,1);
update(a-1,-1);
}
for(int i=1;i<n;i++)
cout<<getSum(i)<<" ";
cout<<getSum(n)<<endl;
}
}
2、二维树状数组
https://vjudge.net/contest/239647#problem/B【POJ 2155】
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
#define ll long long
const int MAXN=1e3+123;
int c[MAXN][MAXN];
int n,q;
int lowbit(int x)
{
return x&(-x);
}
void update(int posi,int posj,int val)
{
int tmpj;
while(posi<=n)
{
tmpj=posj;
while(tmpj<=n)
{
c[posi][tmpj]+=val;
tmpj+=lowbit(tmpj);
}
posi+=lowbit(posi);
}
}
int getSum(int posi,int posj)
{
int ans=0;
int tmpj=posj;
while(posi>0)
{
tmpj=posj;
while(tmpj>0)
{
ans+=c[posi][tmpj];
tmpj-=lowbit(tmpj);
}
posi-=lowbit(posi);
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char ch;
int x1,y1,x2,y2;
int x,y;
scanf("%d%d",&n,&q);
memset(c,0,sizeof(c));
while(q--)
{
getchar();
scanf("%c",&ch);
if(ch=='C')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
update(x1,y1,1);
update(x2+1,y1,1);
update(x1,y2+1,1);
update(x2+1,y2+1,1);
}
else
{
scanf("%d%d",&x,&y);
//查询前k的和对2取模即可
printf("%d\n",getSum(x,y)%2);
}
}
if(t)printf("\n");
}
return 0;
}
3、树状数组求逆序数
https://blog.csdn.net/Fire_to_cheat_/article/details/81129609
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=5e5+10;
ll sum[MAXN],n;
struct Node
{
int id,digit;
Node(){}
Node(int i,int d):id(i),digit(d){}
}node[MAXN];
bool cmp(Node a,Node b)
{
return a.digit<b.digit;
}
ll lowbit(ll x)
{
return x&(-x);
}
void update(ll pos,ll val)
{
while(pos<=n)
{
sum[pos]+=val;
pos+=lowbit(pos);
}
}
ll getSum(ll x)
{
ll ans=0;
while(x>0)
{
ans+=sum[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
while(~scanf("%d",&n))
{
if(n==0)break;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
node[i]=Node(i,x);
}
sort(node+1,node+n+1,cmp);
memset(sum,0,sizeof(sum));
ll cnt=0;
for(int i=1;i<=n;i++)
{
update(node[i].id,1);
cnt+=(i-getSum(node[i].id));
}
cout<<cnt<<endl;
}
return 0;
}
bryce1010专题训练——树状数组的更多相关文章
- NOIp 数据结构专题总结 (2):分块、树状数组、线段树
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) 分块 阅:<「分块」数列分块入门 1-9 by hzwer> 树状数组 Binary Indexed T ...
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive ...
- 2018牛客网暑假ACM多校训练赛(第五场)H subseq 树状数组
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round5-H.html 题目传送门 - https://www.no ...
- 2018牛客网暑假ACM多校训练赛(第五场)F take 树状数组,期望
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round5-F.html 题目传送门 - https://www.no ...
- 树状数组训练题2:SuperBrother打鼹鼠(vijos1512)
先给题目链接:打鼹鼠 这道题怎么写? 很明显是树状数组. 而且,很明显是二维树状数组. 如果你没学过二维的树状数组,那么戳开这里:二维树状数组 看完以后,你就会知道怎么做了. 没有什么好解释的,几乎就 ...
- 树状数组训练题1:弱弱的战壕(vijos1066)
题目链接:弱弱的战壕 这道题似乎是vijos上能找到的最简单的树状数组题了. 原来,我有一个错误的思想,我的设计是维护两个树状数组,一个是横坐标,一个是纵坐标,然后读入每个点的坐标,扔进对应的树状数组 ...
- 牛客训练六:海啸(二维树状数组+vector函数的使用)
题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first. 参考文章:传送门 #incl ...
- CDOJ 838 母仪天下 树状数组 (2014数据结构专题
母仪天下 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/838 Descrip ...
- 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)
链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...
随机推荐
- mysql的DUPLICATE KEY
经常遇到这样的情景,向一个表里插入一条数据,如果已经存在就更新一下,用程序实现麻烦而且在并发的时候可能会有问题,这时用mysql的DUPLICATE KEY 很方便 用法如下: INSERT INTO ...
- TestNG – Run multiple test classes (suite test)
In this tutorial, we will show you how to run multiple TestNG test cases (classes) together, aka sui ...
- mysql读写分离(主从复制)实现
mysql主从复制 怎么安装mysql数据库,这里不说了,仅仅说它的主从复制.过程例如以下: 主从最好都是同一种系统比方都是linux,或者都是windows,当然混合着也是能够成功,不解释了 1.主 ...
- Class.forName("java.lang.String")的作用?
返回字节码: 返回的方式有2种: 第一种是这个类的字节码已经加载到内存里面来了,现在想要取到它的字节码,我直接找到那份字节码把他返回: 第二种是我去得到这个类的字节码,结果在虚拟机里面还没有这个类的字 ...
- Java programming language compiler
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html\ javac - Java programming l ...
- 【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml
这篇博客是因为下述问题产生的 -(代码1): std::string str = FileUtils::getInstance()->getWritablePath(); CCLOG(str.c ...
- JavaScript数组的某些操作(一)
在软件开发的过程中JavaScript的编程在所难免.当中对数组的操作尤为常见,这里介绍一下和JavaScript数组相关的某些操作: 1.删除并返回数组的第一个元素--shift方法: <!D ...
- SVN地址正确,能在网页打开,但是检出失败解决方法
TortoiseSVN缓存问题 右键点击TortoiseSVN -> Settings -> Saved Data, 点击个个“Clear”按钮,把本地缓存都清除了,点击“确定”: 再重新 ...
- Android驱动开发之earlysuspend睡眠模式--实现代码【转】
本文转载自:http://blog.csdn.net/MyArrow/article/details/8136018 (1)添加头文件: #include <linux/earlysuspend ...
- Navicat——如何导出所有的查询数据
前言 很简单就是通过Navicat的查询来查询~ 步骤 真的不要太简单了~ 打开Navicat并点击查询 新建查询 选择对应的连接和库 写入SQL并运行 导出结果 1.选择导出当前的结果 2.选择保存 ...