HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxx = ;
int arry[maxx];
struct node
{
int left;
int right;
int mid;
int val;
} a[maxx*];
void pushup(int root)
{
a[root].val=a[root<<].val+a[root<<|].val;//把laze标记往上传递。不能是加等于,就是等于,因为底部被更新后,需要往上的是新的内容
}
void buildtree(int root,int l,int r)
{
int mid=(l+r)/;
a[root].left=l;
a[root].right=r;
a[root].mid=mid;
a[root].val=;
if(l==r)
{
a[root].val=arry[l];//到最低端的时候
return;
}
buildtree(root*,l,mid);
buildtree(root*+,mid+,r);
pushup(root);//把这个区间创建完成后,需要把更新往上更新
}
void updata(int root,int tag,int val)//单点更新
{
int l = a[root].left,r=a[root].right;
if(l==r)
{
a[root].val+=val;
return;
}
int mid=(l+r)/;
if(tag<=mid)updata(*root,tag,val);
else updata(root*+,tag,val);
pushup(root);
}
int query(int root,int ql,int qr)
{
int res=;
int l=a[root].left,r=a[root].right;
int mid=(l+r)/;
if(ql<=l && qr>=r)return a[root].val;//询问的区间是比这个区间大的,那么代表这个区间的内部的所有都要被选到,因此无需再往下遍历
if(ql<=mid)res+=query(root*,ql,qr);//询问的左区间比当前区间小,那么这个区间的左边有一部分取不到,因此需要继续往下找
if(qr>mid)res+=query(root*+,ql,qr);//询问的右区间比当前的右区间大,那么这个区间的右边有一部分取不到,因此也需要往下找
return res;//最后把这两边的内容传递回去即可
}
int main()
{
int t;
int n;
scanf("%d",&t);
char op[];
int pos,val;
int l,r;
int cas=;
while(t--)
{
scanf("%d",&n);
printf("Case %d:\n",++cas);
for (int i=; i<=n; i++)
{
scanf("%d",&arry[i]);
}
buildtree(,,n);
while(~scanf("%s",op))
{
if(op[]=='E')break;
if(op[]=='A')
{
scanf("%d%d",&pos,&val);
updata(,pos,val);
}
else if(op[]=='S')
{
scanf("%d%d",&pos,&val);
// cout<<"???"<<-val<<endl;
updata(,pos,-val);
}
else
{
scanf("%d%d",&l,&r);
printf("%d\n", query(,l,r));
}
} }
return ;
}
HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和的更多相关文章
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- 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 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- HDU 1166 敌兵布阵 线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- mcelog用法详解
手动启动mcelog方法: # mcelog --daemon Run mcelog in daemon mode, waiting for errors from the kernel. 后台服务启 ...
- LeetCode算法题-Construct Quad Tree(Java实现)
这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ...
- webpack模块定义和使用的模式
在使用webpack作为模块加载工具时,我在想module.exports的模块应该是一种什么模式,最直接地思考是单例.不太确定,所以写一个简单例子做测试. 测试代码 singleton.js: va ...
- MYSQL基本操作(下)
好了,废话不多说,接着开始Mysql剩下部分的小结了 Mysql 之 基础下 事务 事务:一系列将要发生或正在发生的连续操作,旨在保证数据操作的完整性.在事务开启之后,所有的操作都会被临时存储到事务日 ...
- 基于vue-cli的vue项目移动端样式适配,lib-flexible和postcss-px2rem
安装 flexible和 postcss-px2rem(命令行安装) npm install lib-flexible --save npm install postcss-px2rem --save ...
- ELMO模型(Deep contextualized word representation)
1 概述 word embedding 是现在自然语言处理中最常用的 word representation 的方法,常用的word embedding 是word2vec的方法,然而word2vec ...
- tensorflow中的name_scope, variable_scope
在训练深度网络时,为了减少需要训练参数的个数(比如LSTM模型),或者是多机多卡并行化训练大数据.大模型等情况时,往往就需要共享变量.另外一方面是当一个深度学习模型变得非常复杂的时候,往往存在大量的变 ...
- ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
WebAPI应用支持HTTPS的经验总结 在我前面介绍的WebAPI文章里面,介绍了WebAPI的架构设计方面的内容,其中提出了现在流行的WebAPI优先的路线,这种也是我们开发多应用(APP.微信. ...
- java通过百度AI开发平台提取身份证图片中的文字信息
废话不多说,直接上代码... IdCardDemo.java package com.wulss.baidubce; import java.io.BufferedReader; import jav ...
- pytorch .detach() .detach_() 和 .data用于切断反向传播
参考:https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-autograd/#detachsource 当我们再训 ...