HDU 1166 敌兵布阵 树状数组||线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1166
题目大意:
给定n个数的区间N<=50000,还有Q个询问(Q<=40000)求区间和。
每个询问可能增加点k x的值或者减少x。
思路:
原题描述很有爱啊~
树状数组好久没写了~
依旧很熟练,WA了两三次,第一次因为没有输出case,。。。。。。。第二次发现多组数据没有初始化。T^T
~像这种单点修改求区间和的还是用树状数组比较简单~
树状数组:
#include<cstdio>
#include<cstring>
const int MAXN=50000+10;
int sum[MAXN];
inline int lowbit(int x)
{
return x&-x;
} int getsum(int x)
{
int ans=0;
while(x>0)
{
ans+=sum[x];
x-=lowbit(x);
}
return ans;
} void add(int x,int v)
{
while(x<MAXN)
{
sum[x]+=v;
x+=lowbit(x);
}
} int main()
{
//freopen("e:\\input.txt","r",stdin);
int T,kase=1;
scanf("%d",&T);
while(T--)
{
memset(sum,0,sizeof(sum));
int n,t;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&t);
add(i,t);
}
char cmd[10];
printf("Case %d:\n",kase++);
while(scanf("%s",cmd),cmd[0]!='E')
{
int a,b;
scanf("%d%d",&a,&b);
if(cmd[0]=='Q')
printf("%d\n",getsum(b)-getsum(a-1));
else if(cmd[0]=='S')
add(a,-b);
else
add(a,b);
}
}
return 0;
}
线段树:
#include<cstdio>
#include<cstring>
const int MAXN=50000+10;
int sum[MAXN<<2],a[MAXN];
void build(int k,int L,int R)
{
if(L==R) sum[k]=a[L];
else
{
int m=(L+R)/2;
build(k*2,L,m);
build(k*2+1,m+1,R);
sum[k]= sum[k*2]+sum[k*2+1];
}
} int getsum(int k,int L,int R,int a,int b)
{
int m=(L+R)/2,ans=0;
if(a<=L && R<=b) return sum[k];
if(a<=m) ans+=getsum(k*2,L,m,a,b);
if(m<b) ans+=getsum(k*2+1,m+1,R,a,b);
return ans;
} void update(int k,int L,int R,int x,int v)
{
if(L==R) sum[k]+=v;
else
{
int m=(L+R)/2;
if(x<=m) update(k*2,L,m,x,v);
else update(k*2+1,m+1,R,x,v);
sum[k]+=v;
} } int main()
{
// freopen("e:\\input.txt","r",stdin);
int T,kase=1;
scanf("%d",&T);
while(T--)
{
memset(sum,0,sizeof(sum));
int n,t;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]); build(1,1,n);
char cmd[10];
printf("Case %d:\n",kase++);
while(scanf("%s",cmd),cmd[0]!='E')
{
int a,b;
scanf("%d%d",&a,&b);
if(cmd[0]=='Q')
printf("%d\n",getsum(1,1,n,a,b));
else if(cmd[0]=='S')
update(1,1,n,a,-b);
else
update(1,1,n,a,b);
}
}
return 0;
}
HDU 1166 敌兵布阵 树状数组||线段树的更多相关文章
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- HDU 1166 敌兵布阵 (数状数组,或线段树)
题意:... 析:可以直接用数状数组进行模拟,也可以用线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&quo ...
- hdu 1166 敌兵布阵——(区间和)树状数组/线段树
pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...
- 【线段树I:母题】hdu 1166 敌兵布阵
[线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海 ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和)
HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和) 点我挑战题目 题意分析 根据数据范围和询问次数的规模,应该不难看出是个数据结构题目,题目比较裸.题中包括以下命令: 1.Add(i ...
- 数据结构--树状数组&&线段树--基本操作
随笔目的:方便以后对树状数组(BIT)以及基本线段树的回顾 例题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 例题:hdu 1166 敌兵布阵 T ...
- 树状数组 && 线段树应用 -- 求逆序数
参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...
- hdu1394(枚举/树状数组/线段树单点更新&区间求和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...
随机推荐
- 【Henu ACM Round#18 C】Ilya and Sticks
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用cnt[i]记录数字i出现的次数就好. 然后i从1e6逆序到1 如果cnt[i+1]和cnt[i]>0同时成立的话. 那么得 ...
- 使用Spring Mvc 转发 带着模板 父页面 之解决方法 decorators.xml
周末了,周一布置的任务还没完毕,卡在了页面跳转上,接手了一个半截的项目要进行开发,之前没有人给培训.全靠自己爬代码,所以进度比較慢.并且加上之前没实用过 Spring Mvc 开发项目.所以有点吃力, ...
- 9.Nexus私服安装配置
第一步:下载nexus-webapp-1.9.2.4.war包,然后复制到tomcat下的webapps文件夹中 第二步:启动tomcat 第三步:訪问http://localhost:8080/ne ...
- KendoUi中KendoDropDownList控件的使用——三级级联模块的实现
1. 应用需求 在权限系统开发中除了以上数据表关系的设计之外.比較麻烦的地方是级联模块在页面的展示,因为设计中最多是控制到三级,因此三级级联模块的展示.编辑等页面操作是须要解决的问题,这里採用Kend ...
- Android Studio升级到0.8.1后怎样设置字体大小?
升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...
- 自建的IPV6管道
前阵子琢磨IPV6,建立了一个给本机分配IPV6地址的管道,不怎么稳定 http://6tu.me
- android图像处理(3) 浮雕效果
这篇将讲到图片特效处理的浮雕效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值. 例: ABC 求B ...
- jquery中最常用的API有哪些
jquery中最常用的API有哪些 一.总结 一句话总结:取html的方法,class相关的方法,val相关的方法,data相关的方法,attr相关的方法 1.jQuery Object Access ...
- 在电子商务里,一般会提到这样几个词:商品、单品、SPU、SKU
简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SKU. 首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很 ...
- echarts插件-从后台请求的数据在页面显示空白的问题
最近的项目里面关于统计图方面的问题,有涉及到很多,也在博客里面更新了自己所遇到的问题,开发过程中会遇到很多问题,解决技术问题的方法也有千千万 图片.png 在百度上百度了一下,发现了问题所在之处,不得 ...