数据结构--树状数组&&线段树--基本操作
随笔目的:方便以后对树状数组(BIT)以及基本线段树的回顾
例题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
例题:hdu 1166
敌兵布阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
树状数组(BIT)代码:
#include "stdio.h"
#include "string.h"
#define N 50005 int n;
int a[N],c[N]; int lowbit(int x){ return x&(-x); } int Query(int x)
{
int sum = ;
for(int i=x; i>; i-=lowbit(i))
sum += c[i];
return sum;
} int main()
{
int T;
int i,j,Case=;
char str[];
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(a,,sizeof(a));
memset(c,,sizeof(c));
for(i=; i<=n; i++)
{
scanf("%d",&a[i]);
for(j=i; j<=n; j+=lowbit(j))
c[j] += a[i];
}
printf("Case %d:\n",Case++);
while(scanf("%s",str),strcmp(str,"End")!=)
{
scanf("%d %d",&i,&j);
if(strcmp(str,"Add")==)
{
a[i] += j;
for(int k=i; k<=n; k+=lowbit(k))
c[k] += j;
}
else if(strcmp(str,"Sub")==)
{
a[i] -= j;
for(int k=i; k<=n; k+= lowbit(k))
c[k] -= j;
}
else
printf("%d\n",Query(j) - Query(i-));
}
}
return ;
}
线段树代码:
#include "iostream"
#include "cstdio"
#include "cstring"
using namespace std;
#define N 50005
struct point
{
int l,r;
int sum;
}Tree[N*]; void Build(int t,int l,int r)
{
Tree[t].l = l;
Tree[t].r = r;
Tree[t].sum = ;
if(Tree[t].l == Tree[t].r)
{
scanf("%d",&Tree[t].sum);
return ;
}
int mid = (l+r)/;
Build(t<<,l,mid);
Build(t<<|,mid+,r);
Tree[t].sum = Tree[t<<].sum + Tree[t<<|].sum;
} void Add(int t,int l,int r)
{
if(Tree[t].l==Tree[t].r && Tree[t].l==l)
{
Tree[t].sum += r;
return ;
}
int mid = (Tree[t].l+Tree[t].r)/;
if(l <= mid)
Add(t<<,l,r);
else
Add(t<<|,l,r);
Tree[t].sum = Tree[t<<].sum + Tree[t<<|].sum;
}
int Query(int t,int l,int r)
{
if(Tree[t].l==l && Tree[t].r==r)
{
return Tree[t].sum;
}
int mid = (Tree[t].l + Tree[t].r)/;
if(r <= mid)
return Query(t<<,l,r);
else if(l > mid)
return Query(t<<|,l,r);
else
return Query(t<<,l,mid) + Query(t<<|,mid+,r);
} int main()
{
int T;
int iCase = ;
scanf("%d",&T);
while(T--)
{
int n;
iCase++;
printf("Case %d:\n",iCase);
scanf("%d",&n);
Build(,,n);
char str[];
getchar();
while(scanf("%s",str) && strcmp(str,"End")!=)
{
int x,y;
scanf("%d %d",&x,&y);
if(strcmp(str,"Query")==)
{
printf("%d\n",Query(,x,y));
}
else if(strcmp(str,"Add")==)
{
Add(,x,y);
}
else if(strcmp(str,"Sub")==)
{
Add(,x,-y); }
}
}
return ;
}
数据结构--树状数组&&线段树--基本操作的更多相关文章
- 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树
正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...
- 树状数组 && 线段树应用 -- 求逆序数
参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...
- hdu1394(枚举/树状数组/线段树单点更新&区间求和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...
- hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 5147 Sequence II【树状数组/线段树】
Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- 「CodePlus 2017 11 月赛」Yazid 的新生舞会(树状数组/线段树)
学习了新姿势..(一直看不懂大爷的代码卡了好久T T 首先数字范围那么小可以考虑枚举众数来计算答案,设当前枚举到$x$,$s_i$为前$i$个数中$x$的出现次数,则满足$2*s_r-r > 2 ...
- 【洛谷4396/BZOJ3236】[AHOI2013]作业(莫队+分块/树状数组/线段树)
题目: 洛谷4396 BZOJ3236(权限) 这题似乎BZOJ上数据强一些? 分析: 这题真的是--一言难尽 发现题面里没说权值的范围,怕出锅就写了离散化.后来经过面向数据编程(以及膜神犇代码)知道 ...
- CodeForces–830B--模拟,树状数组||线段树
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- BZOJ_1901_&_ZJU_2112_Dynamic_Rankings_(主席树+树状数组/线段树+(Treap/Splay))
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1901 给出一个长度为n的数列A,有m次询问,询问分两种:1.修改某一位置的值;2.求区间[l, ...
随机推荐
- ADO.NET---ExcuteScalar()方法复习
ExcuteScalar(),返回的是查询结果的第一行第一列,返回值是object类型,一般用来查询表中有多少条数据,求最大值等 现在我们用ExcuteScalar()做个测试,需求:我要查询学生表里 ...
- 2015年百度之星初赛(1) --- D KPI
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- P6 EPPM R16.1安装与配置指南(一)
标题 http://www.cnblogs.com/endv/p/5634620.html 安装与配置指南安装与配置指南(数据库)说明哪些How to set up the P6专业数据库和服务器.a ...
- Import 元素 (MSBuild)
Import 元素 (MSBuild) Visual Studio 2013 .NET Framework 4 .NET Framework 3 ...
- 在ASP.NET MVC环境中使用加密与解密
在.NET Framework 4.5的NET框架中,在程序中加密与解密很方便.现在均学习ASP.NET MVC程序了,因此Insus.NET也在此写个学习的例子.在需要时可以参考与查阅. 写一个Ut ...
- AEAI ESB V3.5.4开源发布,应用集成平台
AEAI ESB 应用集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将ESB管理控制台项目开源,目的在于满足客户与伙伴的OEM需求,以及为广大IT爱好者的集成工具提供多一种选择,多一种便利 ...
- Python基础:模块
一.概述 二.导入语句 1.基本语法 2.推荐风格 三.模块 1.模块名 2.模块属性 3.可导出的公有属性 4.直接执行 四.包 1.包名 2.包属性 3.可导出的公有属性 4.其他 五.导入原理 ...
- 关于c#的一些笔记
序: 在vs中,可以生成三种项目: 第一种:控制台项目:用于练习C#语法 第二种:桌面程序项目:比如我们经常看到的桌面程序(CS). 第三种:web项目:用于开发网站 1.我们先来说一下.net和C ...
- JS获取屏幕高度
主要使用了document对象关于窗口的一些属性,这些属性的主要功能和用法如下. 要 得到窗口的尺寸,对于不同的浏览器,需要使用不同的属性和方法:若要检测窗口的真实尺寸,在netscape下需要使用w ...
- DotNetCore跨平台~性能测试~可以放心使用了
使用dotnetCore发布站点后,它的处理请求能力不逊色IIS等大型服务的能力,号称每秒能处理115万个请求,太牛X了也. 先看看它支持的数据库 以下主流数据库都是为支持的 Microsoft SQ ...