题目1:敌兵布阵 

线段树的主要操作:(1)建立线段树(Build)          (2)更新区间值 (Update)           (3)查询区间(Query)

写法一:

#include <stdio.h>
#define maxn 55555
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int sum[maxn<<2];
void PushUP(int rt)
{
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void Build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&sum[rt]);
return;
}
int m=(l+r)>>1;
Build(lson);
Build(rson);
PushUP(rt);
}
void Update(int p,int add,int l,int r,int rt)
{
if(l==r)
{
sum[rt]+=add;
return;
}
int m=(l+r)>>1;
if(p<=m)
Update(p,add,lson);
else
Update(p,add,rson);
PushUP(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r)
return sum[rt];
int m=(l+r)>>1;
int ret=0;
if(L<=m)    ret+=Query(L,R,lson);
if(R>m)     ret+=Query(L,R,rson);
return ret;
}
int main()
{
int n,t,k=1;
char s[15];
scanf("%d",&t);
while(t--)
{
printf("Case %d:\n",k++);
scanf("%d",&n);
Build(1,n,1);
while(~scanf("%s",s))
{
if(s[0]=='E')
break;
int a,b;
scanf("%d%d",&a,&b);
if(s[0]=='Q')
printf("%d\n",Query(a,b,1,n,1));
else if(s[0]=='S')
Update(a,-b,1,n,1);
else
Update(a,b,1,n,1);
}
}
return 0;
}

写法二:

#include<stdio.h>
#define N 50005
typedef struct
{
int Lson;
int Rson;
int sum;
}Tree;
Tree seg_tree[N*3];
int a[N];
void Build(int num,int L,int R)
{
seg_tree[num].Lson=L;
seg_tree[num].Rson=R;
if(L==R)
{
seg_tree[num].sum=a[L];
return;
}
else
{
int mid=(L+R)>>1;
Build(2*num,L,mid);
Build(2*num+1,mid+1,R);
seg_tree[num].sum=seg_tree[2*num].sum+seg_tree[2*num+1].sum;
}
}
void Update(int num,int L,int R,int a,int b)
{
seg_tree[num].sum+=b;
if(L==R&&L==a)
return;
int mid=(L+R)>>1;
if(a<=mid)
Update(2*num,L,mid,a,b);
else
Update(2*num+1,mid+1,R,a,b);
}
int Query(int num,int L,int R,int a,int b)
{
if(L==a&&R==b)
return seg_tree[num].sum;
int mid=(L+R)>>1;
if(b<=mid)
return Query(2*num,L,mid,a,b);
if(a>=mid+1)
return Query(2*num+1,mid+1,R,a,b);
return Query(2*num,L,mid,a,mid)+Query(2*num+1,mid+1,R,mid+1,b);
}
int main()
{
int t,n,k;
char str[15];
scanf("%d",&t);
for(k=1;k<=t;k++)
{
printf("Case %d:\n",k);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
Build(1,1,n);
while(~scanf("%s",str))
{
int a,b;
if(str[0]=='E')
break;
scanf("%d%d",&a,&b);
if(str[0]=='A')
Update(1,1,n,a,b);
else if(str[0]=='S')
Update(1,1,n,a,-b);
else
printf("%d\n",Query(1,1,n,a,b));
}
}
return 0;
}

线段树求区间和(单点更新)相关推荐

  1. 线段树求逆序数(单点更新)

    题目:HDU1394 Minimum Inversion Number 若abcde...的逆序数为k,那么bcde...a的逆序数是多少?我们假设abcde...中小于a的个数为t , 那么大于a的 ...

  2. hdu3074 线段树求区间乘积(单点更新)

    题意:       给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余. 思路:       线段树单点更新,简单题目,不多解释,具体看代码. #i ...

  3. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  4. 线段树求区间最大值RMQ(单点更新)

    题目:HDU1754 #include <stdio.h> #define maxn 222222 #define lson l,m,rt<<1 #define rson m+ ...

  5. HDU 3308 线段树求区间最长连续上升子序列长度

    题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...

  6. Distinct Characters Queries CodeForces - 1234D(线段树求区间字母种类数)

    You are given a string ss consisting of lowercase Latin letters and qq queries for this string. Reca ...

  7. C++实现线段树求区间和-区间查询

    代码如下: #include <iostream> using namespace std; const int N = 10010; int input[N];struct node { ...

  8. 【HDU - 1540】 Tunnel Warfare (线段树进阶操作 区间合并+ 单点更新+ 最长覆盖区间查询 )

    题干: During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the va ...

  9. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]

    寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...

最新文章

  1. springMvc+mybatis+spring 整合 包涵整合activiti 基于maven
  2. HDU1042(高精度模拟乘法)
  3. 搭建YUM服务器,配置yum客户端
  4. NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)
  5. BugkuCTF-MISC题蜜雪冰城~
  6. 求10000以内n的阶乘(信息学奥赛一本通-T1172)
  7. PyQt5, PushButton
  8. 研华数据采集卡如何采集压力信号转化为数字信号_我所了解的数据-数据分析-数据产品...
  9. 监视器(monitor)
  10. dbeaver 设置编码_DBeaver 一个神奇的数据库操作软件
  11. 由于压摆率引起的失真问题
  12. 机器人及其相关零件的发展
  13. 牛客练习赛50 F.tokitsukaze and Another Protoss and Zerg(分治+NTT)(模板题)
  14. powerbuilder建数据库
  15. CAD制图神器-CAD专用键盘
  16. 教师资格证-教育知识与能力
  17. tgp进游戏不显示服务器连接异常,TGP启用腾讯游戏提示“TCLS_CORE异常退出”的解决方法...
  18. Java之Chrome中运行Applet应用
  19. 全网最全RocketMQ 用法及原理总结
  20. 优思学院|一本六西格玛管理必读的重要著作

热门文章

  1. 原始jdbc操作的分析
  2. ThreadLocal的第二种用法 part1
  3. Zuul:路由转发,排除和自定义
  4. spring的aop名词解释
  5. c# decodeuri,用C#进行URL编码
  6. docker里面装mysql_docker中安装及使用mysql
  7. 基于Hadoop的Spark超快安装
  8. java cmd找不到文件_cmd中输入java找不到文件解决方法
  9. python2与python3共存_【python】--python2与python3 共存
  10. JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别