HDU 1166 排兵布阵(线段树单点更新)
题意:
给定n个兵营的士兵初始值, 然后有最多40000个操作;
操作一共有两种, 一个是查询给定[a,b]区间兵营的士兵总和。
另一个是增加/减少指定兵营的士兵数目。
输出每次查询的值。
分析:
线段树单点更新模板
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = + ;
struct{
int l, r, sum;
}tree[maxn*];//起码要*4
int a[maxn];
int n;
void build(int index, int l , int r){
tree[index].l = l, tree[index].r = r;
if( l == r){
tree[index].sum = a[l];//递归建树,当l=r就是叶子节点没办法再分,直接赋值
return;
}
int mid = (l+r) / ;
build(index * , l, mid);
build(index * + , mid + , r);
tree[index].sum = tree[index * ].sum + tree[index* + ].sum;//不是叶子节点, 总和等于它儿子的总和
} void update(int index, int a, int val){ //修改总和的
if(tree[index].l == a && tree[index].r == a){
tree[index].sum += val;//找到该点,直接更改
return;
}
int mid = (tree[index].l + tree[index].r) / ; if(a <= mid)
update(index * , a , val);
else
update(index * + , a, val); tree[index].sum += val;//路径上的点都要更改。
} int query(int index , int ql, int qr){ if(tree[index].l == ql && tree[index].r == qr){
return tree[index].sum;
} int mid = (tree[index].l + tree[index].r) / ;
if(qr <= mid) //查询区间只在这个的左子树
return query(index * , ql, qr);
if(ql > mid) //只在右子树
return query(index * + , ql, qr); return query(index * , ql, mid) + query(index * + , mid + , qr);//左右子树都有的话, 拆分查询区间
} int main(){
int T;
scanf("%d", &T);
int kase = ;
while(T--){
printf("Case %d:\n", kase++);
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
}
build(,,n);
char cho[];
while(scanf("%s",cho) && cho[] != 'E'){
int x, y;
scanf("%d %d", &x, &y);
if(cho[] == 'Q'){
printf("%d\n", query(,x,y));
}
else if(cho[] == 'A'){
update(,x,y);
}
else update(,x,-y);
}
}
return ;
}
HDU 1166 排兵布阵(线段树单点更新)的更多相关文章
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
- HDU 1166 敌兵布阵(线段树单点更新,区间查询)
描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...
- HDU 1166 敌兵布阵 线段树单点更新求和
题目链接 中文题,线段树入门题,单点更新求和,建一棵树就可以了. #include <iostream> #include <cstdio> #include <cmat ...
- 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)
学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
随机推荐
- 基于Tcp协议的上传下载
目录格式: 构建此目录就可随意使用! client端 import socket import sys import os import json import struct sk = socket. ...
- Lightoj 1044 - Palindrome Partitioning (DP)
题目链接: Lightoj 1044 - Palindrome Partitioning 题目描述: 给一个字符串,问至少分割多少次?分割出来的子串都是回文串. 解题思路: 先把给定串的所有子串是不 ...
- qconbeijing2014
http://2014.qconbeijing.com/videoslides.html 周一 周二 周三 周四 周五 周六 2014年5月19日 Deep Dive into Amazon's ...
- qconshanghai2017
https://2017.qconshanghai.com/schedule 第一天 (2017/10/17 星期二) 时间 日程 07:45-09:00 签到 上午 主题演讲 软件质量优化与平台创新 ...
- C#的WinForm中Label透明一例
很久之前開發的一個MIS系統,里面有個登錄界面,採用了PictureBox做背景,上面放了一些Label,試了很多方面不能實現透明,如下圖: 這次重新啟用該系統,看了一下原因,很簡單,原來Label的 ...
- iOS开发XML解析
xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundat ...
- 从Java synchronized和volatile说起
请参看https://www.cnblogs.com/chengxiao/p/6528109.html这个链接,说的特别好
- http与WebSocket
利用websocket连接服务器的最大特点就是:持久链接的特点. 共同点是:都是基于TCP协议进行client-server的链接,websocket是HTML5提出的一套补缺HTTP链接中不能持久链 ...
- DBMS数据库语言
https://www.yiibai.com/dbms/dbms-language.html DBMS具有适当的语言和接口来表达数据库查询和更新.数据库语言可用于读取,存储和更新数据库中的数据. 数据 ...
- Django-常用设置(settings.py)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 当前项目的根目录,Django会依此来定位工程内的相关文件 ...