kb-07专题--线段树-01-单点修改,区间查和
给定区间长度,然后给两个操作,单点增加值和单点减值,询问一个区间的人数和;(水)
代码如下:
/*
写的第一个线段树,丑;
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct
{
int l,r;
int value;
}tr[];//长度是区间长度的四倍;
int n,a[]={},ans=;
void build(int i,int l,int r)//建树
{
tr[i].l=l;
tr[i].r=r;
if(l==r)
{
tr[i].value=a[l];
return ;
}
build(i*,l,(l+r)/);
build(i*+,(l+r)/+,r);
tr[i].value=tr[i*].value+tr[i*+].value;
}
void ADD(int i,int l,int x)//区间加值
{
if(tr[i].l==l&&tr[i].r==l)
{
tr[i].value+=x;
return ;
}
int t=i<<;
if(l<=tr[t].r)
ADD(t,l,x);
t+=;
if(l>=tr[t].l)
ADD(t,l,x);
tr[i].value=tr[i<<].value+tr[(i<<)+].value;
}
void SUB(int i,int l,int x)//区间减值
{
if(tr[i].l==l&&tr[i].r==l)
{
tr[i].value-=x;
return ;
}
int t=i<<;
if(l<=tr[t].r)
SUB(t,l,x);
t+=;
if(l>=tr[t].l)
SUB(t,l,x);
tr[i].value=tr[i<<].value+tr[(i<<)+].value;
}
void QUERY(int i,int l,int r)//区间查询寻;
{
if(tr[i].l==l&&tr[i].r==r)
{
ans+=tr[i].value;
return ;
}
i=i<<;
if(l<=tr[i].r)
{
if(r<=tr[i].r)
QUERY(i,l,r);
else
QUERY(i,l,tr[i].r);
}
i+=;
if(r>=tr[i].l)
{
if(l>=tr[i].l)
QUERY(i,l,r);
else
QUERY(i,tr[i].l,r);
}
}
int main()
{
int T,t=;
cin>>T;
while(T--)
{
memset(a,,sizeof(a));
ans=;
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
printf("Case %d:\n",t++);
build(,,n);
char s[];
int x1,x2;
scanf("%s",s);
int k=;
while(s[]!='E')
{
scanf("%d%d",&x1,&x2);
if(s[]=='A')
ADD(,x1,x2);
else if(s[]=='S')
SUB(,x1,x2);
else if(s[]=='Q')
{
QUERY(,x1,x2);
printf("%d\n",ans);
ans=;
}
scanf("%s",s);
}
}
return ;
}
kb-07专题--线段树-01-单点修改,区间查和的更多相关文章
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- poj3171 Cleaning Shifts【线段树(单点修改区间查询)】【DP】
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4422 Accepted: 1482 D ...
- I Hate It:线段树:单点修改+区间查询
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【线段树(单点修改,区间求和)】HDU1166 - 敌军布阵
hdu1166 敌兵布阵,单点修改,区间求和. [ATTENTION]MAXN要开成节点数的4倍,开得不够会提示TLE. #include<iostream> #include<cs ...
- hdu 1754 线段树(单点替换 区间最值)
Sample Input5 61 2 3 4 5Q 1 5 //1-5结点的最大值U 3 6 //将点3的数值换成6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output5659 # i ...
- hdu 1166 线段树(单点增减 区间求和)
Sample Input1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Sample Outp ...
- HDU 1754 I Hate It(线段树之单点更新 区间最值查询)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It Time Limit: 90 ...
随机推荐
- CoreData介绍
http://blog.csdn.net/zh952016281/article/details/52105683 写在前面 在CoreData中有一些常用的类,称呼可能各不相同.所以这里先约定一些关 ...
- 【Python高级工程师之路】入门+进阶+实战+爬虫+数据分析整套教程
点击了解更多Python课程>>> 全网最新最全python高级工程师全套视频教程学完月薪平均2万 什么是Python? Python是一门面向对象的编程语言,它相对于其他语言,更加 ...
- Vue源码探究-事件系统
Vue源码探究-事件系统 本篇代码位于vue/src/core/instance/events.js 紧跟着生命周期之后的就是继续初始化事件相关的属性和方法.整个事件系统的代码相对其他模块来说非常简短 ...
- PHP安装Xcache扩展
简述 XCache 是一个又快又稳定的 PHP opcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布 ...
- paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之onehot coding styles(encoded-parameter style with registered outputs不推荐但是经常有人写这样的代码)
这样写法,不利与综合,case语句中比较也是full-vector比较.
- 【linux】【rpm】确定程序是否 rpm 安装
执行 rpm -qf 文件名如果结果显示出安装包那就说明是rpm (或者yum)安装 详情参看 rpm -v (或者 man rpm)
- 有关fcrackzip的使用介绍(来自网络)
本文转自:http://longxiaz.blog.163.com/blog/static/131452420201282844545197/ 主要用到的工具是fcrackzip.别的工具没去测试,f ...
- 【全面】Linux基础知识和基本操作语句大全(一)
接触Linux已经有一段时间了,由于实际需要,三三两两地掌握了一些基本语法和实用语句,主要都是在日常开发中用得比较多的,条理不是特别清晰,请见谅!下面开始上硬货!! 基本操作: 关闭Linux系统的命 ...
- python之绝对导入和相对导入
绝对导入 import sys, os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) ...
- STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)
今天把stm32F407的工程之IAR建立完成了,特此记录下. 下载官方固件库,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理.新建以下几个文件 src放 ...