题意:给出n个数,a1,a2,a3,,,,,an,再给出一些操作

add i  j 表示给第i个节点增加j

sub i  j 表示给第i个节点减少j

query i j 表示询问第i个节点到第j个节点的和

套的别人的模板写的---还是要再多自己写写的说-------

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int a[maxn]; struct node{
int l,r;
int s;
}; node tree[*maxn]; int calc(int x,int y) { return x + y;} void build_tree(int i,int l,int r){
if(l==r){
tree[i].l=l;
tree[i].r=r;
tree[i].s=a[l];
return;
}
int mid=(l+r)/;
build_tree(*i,l,mid);
build_tree(*i+,mid+,r);
tree[i].l=l;
tree[i].r=r;
tree[i].s=calc(tree[*i].s,tree[*i+].s);
} void update1(int i,int s,int w){
if(tree[i].l==tree[i].r){
tree[i].s+=w;
return;
}
int mid=(tree[i].l + tree[i].r)/;
if(s<=mid) update1(*i,s,w);
else update1(*i+,s,w); tree[i].s=calc(tree[*i].s,tree[*i+].s);
} void update2(int i,int s,int w){
if(tree[i].l==tree[i].r){
tree[i].s-=w;
return;
}
int mid=(tree[i].l + tree[i].r)/;
if(s<=mid) update2(*i,s,w);
else update2(*i+,s,w); tree[i].s=calc(tree[*i].s,tree[*i+].s);
} int sum(int i,int l,int r){
// printf("tree[%d].s=%d\n",i,tree[i].s);
if(tree[i].l==l&&tree[i].r==r){
return tree[i].s;
}
else{
int mid=(tree[i].l+tree[i].r)/;
if(r<=mid) return sum(*i,l,r);
if(l>mid) return sum(*i+,l,r); return calc(sum(*i,l,mid),sum(*i+,mid+,r));
}
} int main(){
int T;
scanf("%d",&T);
int kase=;
while(T--){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]); build_tree(,,n); char s[];
int x,y;
printf("Case %d:\n",++kase); while(scanf("%s",s)!=EOF){ if(s[] == 'E') break;
if(s[] == 'A'){
scanf("%d %d",&x,&y);
update1(,x,y);
}
if(s[]=='S'){
scanf("%d %d",&x,&y);
update2(,x,y);
}
if(s[] == 'Q'){
scanf("%d %d",&x,&y);
printf("%d\n",sum(,x,y));
}
}
}
return ;
}

HDU 1166 敌兵布阵【线段树 单点更新】的更多相关文章

  1. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  2. HDU 1166 敌兵布阵(线段树单点更新,板子题)

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

  3. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  4. HDU 1166 敌兵布阵(线段树单点更新,区间查询)

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

  5. HDU 1166 敌兵布阵 线段树单点更新求和

    题目链接 中文题,线段树入门题,单点更新求和,建一棵树就可以了. #include <iostream> #include <cstdio> #include <cmat ...

  6. 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)

    学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...

  7. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

  8. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

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

  9. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题

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

随机推荐

  1. 在64位linux上编译32位程序 for i386 intel

    编辑中 # ld -V GNU ld version 2.15.92.0.2 20040927 Supported emulations: elf_x86_64 elf_i386 i386linux ...

  2. CSS3中的2D和3D转换知识介绍

    一  2D转换 转换是CSS3中具有颠覆性的特征之一,可以实现元素的位移.旋转.变形.缩放,甚至支持矩阵方式,配合即将学习的过渡和动画知识,可以取代大量之前只能靠Flash才可以实现的效果. 1.移动 ...

  3. Android开发实现QQ三方登录 标签: android开发qq三方登录

    本文分为两个部分:一是QQ的授权部分:二是获取用户的基本信息部分 一.授权部分 1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还 ...

  4. UVa 11520 Fill in the Square

    题意:给出 n*n的格子,把剩下的格子填上大写字母,使得任意两个相邻的格子的字母不同,且从上到下,从左到右的字典序最小 从A到Z枚举每个格子填哪一个字母,再判断是否合法 #include<ios ...

  5. LeetCode(94)Binary Tree Inorder Traversal

    题目如下: Python代码: def inorderTraversal(self, root): res = [] self.helper(root, res) return res def hel ...

  6. 用一个小的例子来说明为什么TCP采用三次握手才能保证连接成功

    关于TCP的三次握手,有很多朋友还在疑惑为什么是三次,而不是两次,LZ想了一下用一个例子来说明最好. 场景: 办公室有一名前台(服务器),若干业务员(fork出来的进程) 客户(客户端)   为什么我 ...

  7. 11 个使用 GNOME 3 桌面环境的理由

    11 个使用 GNOME 3 桌面环境的理由 作者: David Both 译者: LCTT geekpi | 2017-08-22 11:43   评论: 27 GNOME 3 桌面的设计目的是简单 ...

  8. CF1038D Slime 构造

    题目大意: 有nnn只史莱姆qwq,每只史莱姆有一个分数,每次一只史莱姆可以吞掉左边的或者右边的史莱姆(要是有的话),然后ta的分数会减去被吞的史莱姆的分数,问最后剩下的史莱姆分数最大为多少 输入格式 ...

  9. 路飞学城Python-Day24

    12.粘包现象 客户端接收的信息指定了的字节,TCP协议没有丢失协议,只是只能接收指定的字节数,于是产生出了粘包现象 服务端接收命令只能接收1024字节,服务端执行命令结果以后传输给客户端,客户端再以 ...

  10. JS iframe给父类传值

    父类页面 <html><head> <script type="text/javascript">            function Ge ...