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 ...
随机推荐
- 用Jersey为Android客户端开发Restful Web Service
平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
- AE开发关于OnMapReplaced方法的使用原理
The OnMapReplaced event is triggered whenever the IMapControl2::Map is replaced by another map, such ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- Trie入门讲解
我们常常用Trie(也叫前缀树)来保存字符串集合.如下图所示就是一个Trie. 上图表示的字符串集合为$\{a,to,tea,ted,ten,i,in,inn \}$,每个单词的结束位置对应一个“单词 ...
- HTML5中的SSE(服务器推送技术)
本文原链接:https://cloud.tencent.com/developer/article/1194063 SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 概述 基本介绍 与We ...
- linux文本编辑器-VIM基本使用方法
vim [OPTION]... FILE... +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首vim + file 直接打开file,光标在最后一行 三种主要模式 ...
- Python读写文件实际操作的五大步骤
Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Pytho ...
- 通过脚本批量添加AD用户
1.新建一个csv文件(逗号分隔的一种值文件) 内容为:放在C:\盘根目录下 test300 test300 .com test300 test301 test301 .com test301 tes ...
- 关于flyme5显示不到和卸载不到旧应用解决方法
笔者买入一台mx5,升级flyme5后旧应用没有显示出来,而且在设置的应用管理都没显示旧应用. 通过adb命令: adb shell pm list packages显示所有包名, 查看自己要删除应用 ...
- 你对CommonJS规范了解多少?
写在前面 为什么会出现CommonJS规范? 因为JavaScript本身并没有模块的概念,不支持封闭的作用域和依赖管理,传统的文件引入方式又会污染变量,甚至文件引入的先后顺序都会影响整个项目的运行. ...