单点更新是最最基础的线段树,只更新叶子节点,然后把信息用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(线段树入门)的更多相关文章

  1. HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  2. 线段树 HDU-1166 敌兵布阵

    敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...

  3. HDU-1166敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  4. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. HDU1166 敌兵布阵_线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. 线段树 - HDU1166 - 敌兵布阵

    2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决: 线段树是一种二叉平衡树 参考书目:张新华的< ...

  7. 线段树——hdu1166敌兵布阵

    一.题目回顾 题目链接:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个 ...

  8. hdu1166 敌兵布阵 线段树(区间更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. HDU1166敌兵布阵(线段树单点更新)

    线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.       对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b ...

随机推荐

  1. open-falcon之dashboard\portal说明.md

    dashboard 功能 为用户展示监控数据 配置文件 gunicorn.conf - workers,dashboard并发进程数 - bind,dashboard的http监听端口 - proc_ ...

  2. 关于使用Delphi XE10 进行android开发的一些总结

    RAD,可以快速开发出来,但是问题较多最好别用 说实话    做出来的app 太!大!了!  十分的特别的占内存!       FireMonkey 真心太大了...  太占内存了  开发一般应用还可 ...

  3. Qt编写可拖动对象+背景地图+多种样式+多种状态(开源)

    在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,为此特意编写本控件,全部开源出来,欢迎大家提建议.同时多多支持整套自定义控件 ...

  4. Win7/Win8/IIS7/IIS8配置ASP/ACCESS

    1.在IIS信息服务管理器配置好站点后,配置ASP属性: a.IIS启用ASP 1.打开控制面板>>程序和功能>>“打开或关闭windows功能”,见下图 2.稍等片刻,出现一 ...

  5. 【css系列】创建网页加载进度条

    一.最简单或者明显的方式是使用定时器 1.在网页中加入布局覆盖真实网页内容 2.使用定时器确定加载所用时间的长短,其实并不是真正的加载进度实现 <!DOCTYPE html> <ht ...

  6. ubuntu14.04 LTS Shutter配置快捷键

    一 shutter设置后的截图 二 shutter配置快捷键 可通过 $shutter --help 查看命令 点击 “应用”按钮,然后:

  7. [转]mii-tool与ethtool的用法详解

    1.mii-tool 配置网络设备协商方式的工具: 感谢原文作者!原文地址:http://blog.chinaunix.net/uid-20639775-id-154546.html 1.1 mii- ...

  8. 学习项目部署Django+uwsgi+Nginx生产环境部署

    绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...

  9. 【CF662C】Binary Table 按位处理

    [CF662C]Binary Table 题意:给你一个$n\times m$的01网格,你可以进行任意次操作,每次操作是将一行或一列的数都取反,问你最多可以得到多少个1? $n\le 20,m\le ...

  10. python的for else组合用法

    如下代码,输入评论,如果评论中含有敏感词则更换成*号,否则正常输入. li = ["老师", "你好", "333", "4444 ...