题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

线段树中对某一点的值进行改变;

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define N 50010
#define Lson r<<1
#define Rson r<<1|1 struct SegmentTree
{
int L, R, k, sum;
int Mid()
{
return (L+R)>>;
}
int len()
{
return R-L+;
}
}a[N<<]; void BuildTree(int r,int L,int R)
{
a[r].L = L; a[r].R = R; a[r].k = ;
if(L == R)
{
scanf("%d",&a[r].sum);
return ;
} BuildTree(Lson, L, a[r].Mid());
BuildTree(Rson, a[r].Mid()+, R); a[r].sum = a[Lson].sum + a[Rson].sum;
}
int Query(int r, int L, int R)
{
if(a[r].R == R && a[r].L == L)
return a[r].sum;
if(L>a[r].Mid())
return Query(Rson, L, R);
else if(R <= a[r].Mid())
return Query(Lson, L, R);
else
{
int sum1=Query(Lson, L, a[r].Mid());
int sum2=Query(Rson, a[r].Mid()+, R);
return sum1 + sum2;
}
}
void Update(int r, int p, int x)
{
if(a[r].L == p && a[r].R == p)
{
a[r].sum += x;
return ;
} if(p<=a[r].Mid())
Update(Lson, p, x);
else
Update(Rson, p, x); a[r].sum = a[Rson].sum + a[Lson].sum;
}
int main()
{
int t=, T, n, L, R, p, x;
char s[];
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
BuildTree(, , n);
printf("Case %d:\n", t++);
while(scanf("%s", s))
{
if(s[] == 'E')break;
else if(s[] == 'Q')
{
scanf("%d %d", &L, &R);
printf("%d\n", Query(, L, R));
}
else if(s[] == 'A')
{
scanf("%d%d", &p,&x);
Update(, p, x);
}
else if(s[] == 'S')
{
scanf("%d %d", &p, &x);
Update(, p, -x);//减去一个数可以看做加一个负数;
}
}
}
return ;
}

线段树

关于树状数组:参考链接

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream> using namespace std; #define N 50500
#define met(a, b) memset(a, b, sizeof(a))
int Tree[N], n; int lowbit(int x)
{
return x&(-x);
} void Update(int pos, int num)
{
while(pos<=n)
{
Tree[pos]+=num;
pos += lowbit(pos);
}
} int GetSum(int pos)
{
int s=;
while(pos)
{
s += Tree[pos];
pos -= lowbit(pos);
}
return s;
}
int main()
{
int T, t=;
scanf("%d", &T);
while(T--)
{
met(Tree, );
int num, pos, x, y;
scanf("%d", &n);
for(int i=; i<=n; i++)
{
scanf("%d", &num);
Update(i, num);
}
printf("Case %d:\n", t++);
char s[];
while(scanf("%s", s), s[]!='E')
{
if(s[]=='A')
{
scanf("%d %d", &pos, &num);
Update(pos, num);
}
if(s[]=='S')
{
scanf("%d %d", &pos, &num);
Update(pos, -num);
}
if(s[]=='Q')
{
scanf("%d %d", &x, &y);
int ans = GetSum(y)-GetSum(x-);
printf("%d\n", ans);
}
}
}
return ;
}

树状数组

敌兵布阵---hud1166(线段树或者树状数组模板)的更多相关文章

  1. HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树)

    HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树) Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...

  2. hdu acm 1166 敌兵布阵 (线段树)

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

  3. HDU 1166 敌兵布阵(线段树/树状数组模板题)

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

  4. HDUOJ----1166敌兵布阵(线段树单点更新)

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

  5. HDU1166 敌兵布阵_线段树

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

  6. HDU1166:敌兵布阵(线段树模板)

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

  7. hdu 1166敌兵布阵(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    M ...

  8. HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】

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

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

    敌兵布阵                                                         Time Limit: 2000/1000 MS (Java/Others)  ...

  10. HUD 1166:敌兵布阵(线段树 or 树状数组)

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

随机推荐

  1. 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...

  2. Excel 导入遍历

    package com.founder.ec.cms.service.impl; import com.founder.ec.cms.service.ProductListImportService; ...

  3. Elasticseach的评分机制

    lucene 的评分机制 elasticsearch是基于lucene的,所以他的评分机制也是基于lucene的.评分就是我们搜索的短语和索引中每篇文档的相关度打分. 如果没有干预评分算法的时候,每次 ...

  4. pyinstaller 将.py生成.exe ----报错 “IndexError: tuple index out of range”

    pyinstaller将py打包为exe文件,用pysintaller居然报错 File "c:\anaconda3\lib\site-packages\PyInstaller\depend ...

  5. STL——关联式容器

    一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...

  6. 关于vc工程包含多个lib库老是提示无法打开问题

    在一个VC项目中,我要包含五个lib库,我在连接器->常规->附加库目录中输入了正确的库包含路径,然后再连接器->输入->附加依赖项中输入:ws2_32.lib;wsock32 ...

  7. 【python3】基于 qq邮箱的邮件发送

    脚本内容: #!/usr/bin/python3 # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText ...

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

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

  9. 第四步 使用 adt-eclipse 打包 Cordova (3.0及其以上版本) + sencha touch 项目

    cordova最新中文api http://cordova.apache.org/docs/zh/3.1.0/ 1.将Cordova 生成的项目导入到adt-eclipse中,如下: 项目结构如下: ...

  10. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...