题目传送门~~戳一戳

线段树解法

注意数组大小,一般我们用线段树,都开四倍空间。但是这道题数据量是一百万,四倍开不了

所以我们就不能开四倍,而要计算一下空间,避免浪费。

计算方法就是  1000000  找到2的n次方刚好大于一百万的那个数  就是2的20次方是1048576

然后再拿1048576 x 2  = 2097152    得到的这个数就是所需的大概空间

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2e6+7;
const int maxnode=2097152;
struct NODE{int left,right,value;
}node[maxnode];
int father[maxn];
int n,m,x,y,g;
void BuildTree(int i,int left,int right){node[i].left=left;node[i].right=right;node[i].value=0;if(left==right){father[left]=i;return ;}BuildTree(i<<1,left,(left+right)/2);BuildTree((i<<1)+1,(left+right)/2+1,right);
}
void UpdateTree(int ri){if(ri==1) return ;int fi=ri/2;int a=node[fi<<1].value;int b=node[(fi<<1)+1].value;node[fi].value=a+b;//这道题是求区间和UpdateTree(ri/2);
}
int ans;
void Query(int i,int l,int r){if(node[i].left==l&&node[i].right==r){ans+=node[i].value;return ;//这道题是求区间和}i=i<<1;if(l<=node[i].right){if(r<=node[i].right) Query(i,l,r);else Query(i,l,node[i].right);}i++;if(r>=node[i].left){if(l>=node[i].left) Query(i,l,r);else Query(i,node[i].left,r);}
}
int main(){scanf("%d%d",&n,&m);BuildTree(1,1,n);for(int i=1;i<=n;i++){scanf("%d",&g);node[father[i]].value=g;UpdateTree(father[i]);}char op[20];while(m--){scanf(" %s%d%d",&op,&x,&y);ans=0;if(op[0]=='Q'){Query(1,x,y);printf("%d\n",ans);}else{node[father[x]].value+=y;//这里是新增杀敌数UpdateTree(father[x]);}}return 0;
}

树状数组解法:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e6+7;
int c[maxn];
int n,m,x,y,flag;
char str[15];
int lowbit(int x){return x&(-x);
}
void add(int i,int val){while(i<=n){c[i]+=val;i+=lowbit(i);}
}
int Sum(int i){int sum=0;while(i>0){sum+=c[i];i-=lowbit(i);}return sum;
}
int main(){memset(c,0,sizeof(c));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&flag);add(i,flag);}while(m--){scanf(" %s",str);scanf("%d%d",&x,&y);if(str[0]=='Q')printf("%d\n",Sum(y)-Sum(x-1));else if(str[0]=='A') add(x,y);}
}

NYOJ116----线段树树状数组相关推荐

  1. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  2. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  3. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  4. 8.8线段树和树状数组

    题目链接   http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28619#overview 密码 acmore 还是感觉不怎么会线段树,还是 ...

  5. 线段树/树状数组问题 | 问题集合

    写在前面 线段树代码实在冗长,于是乎能用树状数组直接搞的就懒得打线段树了(:溜 1.P2620[QZYZ] 校门外的树 描述 Description 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有 ...

  6. 花神游历各国 题解(小清新线段树/树状数组+并查集)

    题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...

  7. LeetCode Range Sum Query - Mutable(树状数组、线段树)

    问题:给出一个整数数组,求出数组从索引i到j范围内元素的总和.update(i,val)将下标i的数值更新为val 思路:第一种方式是直接根据定义,计算总和时直接计算从i到j的和 第二种方式是使用树状 ...

  8. hdu 4417(线段树OR树状数组)

    题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...

  9. 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set

    题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...

  10. hdu2492 数状数组或者线段树

    题意:      给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...

最新文章

  1. 重磅!UCSF的研究者利用脑机接口首次让患者输出完整句子,展现恢复语言沟通的潜力...
  2. 【TCP传输数据-键盘录入】
  3. lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件
  4. 将一个文件夹的文件复制到另一个文件夹
  5. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
  6. c# 批量mqtt_C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
  7. ECMAScript:客户端脚本语言的标准
  8. Solr删除managedschema
  9. 中兴助力软银开启首次5G测试
  10. 计算机基础与应用演示文稿教案,计算机应用基础教案82修饰演示文稿.pdf
  11. SSD---系统架构
  12. SpringCloud第一章 Euraka服务注册与发现组件
  13. Redis远程连接出现An existing connection was forcibly closed by the remote host.远程主机强制关闭现有连接
  14. 华为G700电脑版Root软件-Eroot
  15. 畅游陈德文:中国网游的发展与未来趋势
  16. 斐讯dns劫持,路由器DNS被劫持的解决办法
  17. 安装R语言(Rstudio、R、RTools)
  18. 自己开发的一个抢票软件客户端
  19. 回收站删除了怎么恢复
  20. 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等?

热门文章

  1. Egyptian Collegiate Programming Contest (ECPC 2015) C题 Connecting Graph
  2. Apache Shiro学习笔记(七)IniWebEnvironment
  3. Nutch数据集的目录具体内容
  4. mysql 写出高性能sql 防止索引失效总结
  5. EnglishWords——星期与月份
  6. 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
  7. POJ1276:Cash Machine(多重背包)
  8. centos locale报错问题
  9. 分享网上一篇产品经理的经验总结--产品经理九步法
  10. APUE读书笔记-14高级输入输出-04流(1)