hdu1166敌兵布阵&&hdu1754I Hate It(线段树入门)
单点更新是最最基础的线段树,只更新叶子节点,然后把信息用pushup这个函数更新上来。
http://acm.hdu.edu.cn/showproblem.php?pid=1166
update单点更新,query区域求和。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 200001
using namespace std;
struct node
{
int l,r;
__int64 w;
} q[*N];
void pushup(int rt)
{
q[rt].w=q[rt*].w+q[rt*+].w;
}
void build(int l,int r,int rt)
{
q[rt].l=l;
q[rt].r=r;
q[rt].w=;
if(l==r)
{
scanf("%I64d",&q[rt].w);
return ;
}
build(l,(l+r)/,rt*);
build((l+r)/+,r,rt*+);
pushup(rt);
}
void update(int sum,int key,int l,int r,int rt)
{
if(sum<l||sum>r)
return ;
if(l==r&&sum==l)
{
q[rt].w+=(__int64)key;
return ;
}
update(sum,key,l,(l+r)/,rt*);
update(sum,key,(l+r)/+,r,rt*+);
pushup(rt);
}
__int64 query(int ll,int rr,int l,int r,int rt)
{
if(ll>r||rr<l) return ;
if(ll<=l&&rr>=r)
{
return q[rt].w;
}
return query(ll,rr,l,(l+r)/,rt*)+query(ll,rr,(l+r)/+,r,rt*+);
}
int main()
{
int n,sum1,sum2,T,K=;
char a[];
scanf("%d",&T);
while(T--)
{
K++;
scanf("%d",&n);
build(,n,);
printf("Case %d:\n",K);
while(scanf("%s",a)!=EOF)
{
if(strcmp(a,"End")==) break;
else if(strcmp(a,"Query")==)
{
scanf("%d%d",&sum1,&sum2);
__int64 t=query(sum1,sum2,,n,);
printf("%I64d\n",t);
}
else if(strcmp(a,"Sub")==)
{
scanf("%d%d",&sum1,&sum2);
update(sum1,-sum2,,n,); }
else if(strcmp(a,"Add")==)
{
scanf("%d%d",&sum1,&sum2);
update(sum1,sum2,,n,);
}
} }
return ;
}
http://acm.hdu.edu.cn/showproblem.php?pid=1754
update单点替换,query区间最值
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 200001
using namespace std;
struct node
{
int l,r;
__int64 w;
}q[*N];
void pushup(int rt)
{
q[rt].w=max(q[rt*].w,q[rt*+].w);
}
void build(int l,int r,int rt)
{
q[rt].l=l;
q[rt].r=r;
q[rt].w=;
if(l==r)
{
scanf("%I64d",&q[rt].w);
return ;
}
build(l,(l+r)/,rt*);
build((l+r)/+,r,rt*+);
pushup(rt);
}
void update(int sum,int key,int l,int r,int rt)
{
if(sum<l||sum>r)
return ;
if(l==r&&sum==l)
{
q[rt].w=(__int64)key;
return ;
}
update(sum,key,l,(l+r)/,rt*);
update(sum,key,(l+r)/+,r,rt*+);
pushup(rt);
}
__int64 query(int ll,int rr,int l,int r,int rt)
{
if(ll>r||rr<l) return ;
if(ll<=l&&rr>=r)
{
return q[rt].w;
}
return max(query(ll,rr,l,(l+r)/,rt*),query(ll,rr,(l+r)/+,r,rt*+));
}
int main()
{
int n,m,sum1,sum2;
char a[];
while(scanf("%d%d",&n,&m)!=EOF)
{
build(,n,);
while(m--)
{
scanf("%s%d%d",a,&sum1,&sum2);
if(a[]=='U')
{
update(sum1,sum2,,n,);
}
else if(a[]=='Q')
{
__int64 t=query(sum1,sum2,,n,);
printf("%I64d\n",t);
}
}
}
return ;
}
hdu1166敌兵布阵&&hdu1754I Hate It(线段树入门)的更多相关文章
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- 线段树 HDU-1166 敌兵布阵
敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...
- HDU-1166敌兵布阵(线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- hdu1166 敌兵布阵(线段树 求区间和 更新点)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1166 敌兵布阵_线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 线段树 - HDU1166 - 敌兵布阵
2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决: 线段树是一种二叉平衡树 参考书目:张新华的< ...
- 线段树——hdu1166敌兵布阵
一.题目回顾 题目链接:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个 ...
- hdu1166 敌兵布阵 线段树(区间更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU1166敌兵布阵(线段树单点更新)
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b ...
随机推荐
- 给Repeater控件里添加序号的5种方法
Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...
- C#TreeView节点选中后失去焦点时改变节点背景色
C#TreeView节点选中后失去焦点时改变节点背景色 在使用TreeView控件时候,单击一个节点,当鼠标聚焦到别的地方的时候,之前点击的这个节点就看不清楚了 举例截图 单击后 ...
- SharpGL学习笔记(十一) 光源创建的综合例子:光源参数可调节的测试场景
灯光的测试例子:光源参数可以调节的测试场景 先看一下测试场景和效果. 场景中可以切换视图, 以方便观察三维体和灯光的位置.环境光,漫射光,镜面反射光都可以在四种颜色间切换. 灯光位置和摄像机位置(Lo ...
- 题目1198:a+b(高精度计算,好像有点问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1198 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- [原]Failed to load SELinux policy. System Freezing ----redhat7or CentOS7 bug
重启rhel7或者centos7 启动界面按 e 在启动项后面加上enforcing=0 Ctrl+x 运行修改后的grub 进入系统 编辑保存/etc/selinux/config 重启
- jquery中event对象属性与方法小结
JQuery事件中的Event属性是经常性的被忽略的.大多数时间你的确不怎么用它,但有些时候它还是它还是有作用的.如获知触发时用户的环境(是否按了shift etc).每个浏览器对event都有不同的 ...
- Mac - MySQL初始密码忘记重置MySQL root密码
在什么情况下,需要重置root密码呢?那就是我们忘记了.还有一种比较坑的,那就是笔者的这种情况.按照正常的情况下,MySQL安装完之后,会弹出一个对话框,显示着一个临时的root密码,但无论笔者如何重 ...
- xtrabackup安装部署(二)
在官网中,复制相关链接下载最新版本(建议使用当前发布版本前6个月左右的稳定版本) https://www.percona.com/downloads/XtraBackup/LATEST/ 1.下载和安 ...
- msql_createdb: 建立一个新的 mSQL 数据库。
mcrypt_ecb: 使用 ECB 将资料加/解密. mcrypt_get_block_size: 取得编码方式的区块大小. mcrypt_get_cipher_name: 取得编码方式的名称. m ...
- POJ 3580 - SuperMemo - [伸展树splay]
题目链接:http://poj.org/problem?id=3580 Your friend, Jackson is invited to a TV show called SuperMemo in ...