NYOJ116----线段树树状数组
题目传送门~~戳一戳
线段树解法
注意数组大小,一般我们用线段树,都开四倍空间。但是这道题数据量是一百万,四倍开不了
所以我们就不能开四倍,而要计算一下空间,避免浪费。
计算方法就是 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----线段树树状数组相关推荐
- 树套树 ----- 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],我们要减去[ ...
- 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax为yyy 解题思路: 首先我们知道权值线段树是 ...
- poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★
poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...
- 8.8线段树和树状数组
题目链接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28619#overview 密码 acmore 还是感觉不怎么会线段树,还是 ...
- 线段树/树状数组问题 | 问题集合
写在前面 线段树代码实在冗长,于是乎能用树状数组直接搞的就懒得打线段树了(:溜 1.P2620[QZYZ] 校门外的树 描述 Description 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有 ...
- 花神游历各国 题解(小清新线段树/树状数组+并查集)
题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...
- LeetCode Range Sum Query - Mutable(树状数组、线段树)
问题:给出一个整数数组,求出数组从索引i到j范围内元素的总和.update(i,val)将下标i的数值更新为val 思路:第一种方式是直接根据定义,计算总和时直接计算从i到j的和 第二种方式是使用树状 ...
- hdu 4417(线段树OR树状数组)
题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...
- 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...
- hdu2492 数状数组或者线段树
题意: 给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...
最新文章
- 重磅!UCSF的研究者利用脑机接口首次让患者输出完整句子,展现恢复语言沟通的潜力...
- 【TCP传输数据-键盘录入】
- lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件
- 将一个文件夹的文件复制到另一个文件夹
- Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
- c# 批量mqtt_C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
- ECMAScript:客户端脚本语言的标准
- Solr删除managedschema
- 中兴助力软银开启首次5G测试
- 计算机基础与应用演示文稿教案,计算机应用基础教案82修饰演示文稿.pdf
- SSD---系统架构
- SpringCloud第一章 Euraka服务注册与发现组件
- Redis远程连接出现An existing connection was forcibly closed by the remote host.远程主机强制关闭现有连接
- 华为G700电脑版Root软件-Eroot
- 畅游陈德文:中国网游的发展与未来趋势
- 斐讯dns劫持,路由器DNS被劫持的解决办法
- 安装R语言(Rstudio、R、RTools)
- 自己开发的一个抢票软件客户端
- 回收站删除了怎么恢复
- 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等?
热门文章
- Egyptian Collegiate Programming Contest (ECPC 2015) C题 Connecting Graph
- Apache Shiro学习笔记(七)IniWebEnvironment
- Nutch数据集的目录具体内容
- mysql 写出高性能sql 防止索引失效总结
- EnglishWords——星期与月份
- 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
- POJ1276:Cash Machine(多重背包)
- centos locale报错问题
- 分享网上一篇产品经理的经验总结--产品经理九步法
- APUE读书笔记-14高级输入输出-04流(1)