HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板
自己写的第一棵线段树&第一棵树状数组 莫名的兴奋
线段树:
#include <cstdio>
using namespace std;
int cases,n,tree[200500],ql,qr;
char s[50];
void build(int l,int r,int num){
if(l==r){scanf("%d",&tree[num]);return;}
int mid=(l+r)/2;
build(l,mid,num*2);
build(mid+1,r,num*2+1);
tree[num]=tree[2*num]+tree[2*num+1];
}
int qu(int l,int r,int num){
if(ql<=l&&qr>=r)return tree[num];
int mid=(l+r)/2,sum=0;
if(mid>=ql)sum+=qu(l,mid,num*2);
if(mid<qr)sum+=qu(mid+1,r,num*2+1);
return sum;
}
void add(int l,int r,int num){
if(l==r){tree[num]+=qr;return;}
int mid=(l+r)/2;
if(mid>=ql)add(l,mid,num*2);
if(mid<ql)add(mid+1,r,num*2+1);
tree[num]=tree[2*num]+tree[2*num+1];
}
int main()
{
scanf("%d",&cases);
for(int ii=1;ii<=cases;ii++){
printf("Case %d:\n",ii);
scanf("%d",&n);
build(1,n,1);
while(scanf("%s",s)&&s[0]!='E'){
scanf("%d%d",&ql,&qr);
if(s[0]=='Q')printf("%d\n",qu(1,n,1));
else if(s[0]=='A')add(1,n,1);
else if(s[0]=='S')qr=-qr,add(1,n,1);
}
}
}
树状数组:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
int cases,n,a[50005],c[50005];
char s[50];
int lowbit(int x){return x&(-x);}
void add(int x,int v)
{
while(x<=n)
{
c[x]+=v;
x+=lowbit(x);
}
}
int find(int x)
{
int ans=0;
while(x>0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
scanf("%d",&cases);
for(int ii=1;ii<=cases;ii++)
{
printf("Case %d:\n",ii);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
add(i,a[i]);
}
while(scanf("%s",s)&&s[0]!='E')
{
register int xx,yy;
scanf("%d%d",&xx,&yy);
if(s[0]=='Q')
printf("%d\n",find(yy)-find(xx-1));
else if(s[0]=='A')
add(xx,yy);
else if(s[0]=='S')
add(xx,-yy);
}
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
}
}
HDU 1166 线段树模板&树状数组模板的更多相关文章
- HDU 1166 敌兵布阵 (数状数组,或线段树)
题意:... 析:可以直接用数状数组进行模拟,也可以用线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&quo ...
- HDU 1166 敌兵布阵(线段树/树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...
- luogu3368树状数组模板2
题目链接:https://www.luogu.org/problemnew/show/P3368 题意:与模板1不同的是这题的操作是树状数组并不在行的区间更新和单点查找,如果按照模板1那样写肯定会T. ...
- 敌兵布阵 HDU 1166 线段树
敌兵布阵 HDU 1166 线段树 题意 这个题是用中文来描写的,很简单,没什么弯. 解题思路 这个题肯定就是用线段树来做了,不过当时想了一下可不可用差分来做,因为不熟练就还是用了线段树来做,几乎就是 ...
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 树状数组模板(pascal) 洛谷P3374 【模板】树状数组1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- 敌兵布阵 HDU - 1166 (树状数组模板题,线段树模板题)
思路:就是树状数组的模板题,利用的就是单点更新和区间求和是树状数组的强项时间复杂度为m*log(n) 没想到自己以前把这道题当线段树的单点更新刷了. 树状数组: #include<iostrea ...
- HDU - 1166 树状数组模板(线段树也写了一遍)
题意: 汉语题就不说题意了,用到单点修改和区间查询(树状数组和线段树都可以) 思路: 树状数组的单点查询,单点修改和区间查询. 树状数组是巧妙运用二进制的规律建树,建树就相当于单点修改.这里面用到一个 ...
随机推荐
- 配置Android的NDK开发环境(eclipse)
ndk下载地址: http://blog.csdn.net/zhanghuoding/article/details/51345256 在eclipse设置ndk位置 右键你的工程,android t ...
- sysbench_mysql
ref http://seanlook.com/2016/03/28/mysql-sysbench/ 测试 当执行下面这个sysbench测试mysql的时候,你不知道的可能可能是: 这到底是在测试读 ...
- jquery动态生成二维码添加自定义logo
动态生成二维码中间带logo. jquery.qrcode.js 动态生成二维码api很简单. 引入jquer(版本任意),引入jquery.qrcode.js 不需要中间带logo这样就可以了.带l ...
- Nginx反向代理WebSocket(WSS)
1. WebSocket协议 WebSocket 协议提供了一种创建支持客户端和服务端实时双向通信Web应用程序的方法.作为HTML5规范的一部分,WebSockets简化了开发Web实时通信程序的难 ...
- (ccf)201703-3markdown
#include<iostream> #include<memory.h> #include<stack> #include<string> #incl ...
- Emacs的undo与redo
在Emacs的手册16.1节中有这样一句话, Any command other than an undo command breaks the sequence of undo commands. ...
- 【Mail.Ru Cup 2018 Round 2 B】 Alice and Hairdresser
[链接] 我是链接,点我呀:) [题意] [题解] 因为只会增加. 所以. 一开始暴力算出来初始答案 每次改变一个点的话. 就只需要看看和他相邻的数字的值就好. 看看他们是不是大于l 分情况增加.减少 ...
- zookeeper监控之taokeeper
1.taokeeper简介 淘宝的开源监控zookeeper的工具,年久失修! 项目地址: https://github.com/alibaba/taokeeper 监控项: CPU/MEM/LOAD ...
- Docker在Windows 7下安装
前言&一些资料: Docker之父:Solomon Hykes Docker生日:2013年3月 Docker历史小故事 1.下载地址:(daocloud是一个中国的docker服务商,知不知 ...
- ELECTRON开发环境配置方法
1.下载并安装Node.js 下载地址:https://nodejs.org/en/download/current/ 安装之后进行验证 2.下载并这装electron 安装命令:npm instal ...