【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)

最简单的线段树之一,中文题目,不翻译。。。。

注释讲的比较少,这已经是最简单的线段树,如果看不懂真的说明最基础的理论没明白

推荐一篇文章http://www.cnblogs.com/liwenchi/p/5760498.html

可能和我的线段树风格不一样,无所谓啦,多理解,理解了就可以自己编自己喜欢风格的模板

前排强势提醒!!!线段树的函数中只要涉及到区间(更新/查询),就有一个很容易出错的点。

详情见我的另一篇:http://www.cnblogs.com/liwenchi/p/5761257.html

 1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4 using namespace std;5 #define N 10000036 int ans[1000003];7 struct nod8 {9     int l,r;
10     int data;
11 }tree[5*N];
12
13 void push_up(int i)
14 {
15     tree[i].data = min(tree[i*2].data,tree[i*2+1].data);//更新tree[i]的最小值,由左孩子右孩子节点决定
16 }
17 void build_tree(int i,int l,int r)
18 {
19     tree[i].l=l;
20     tree[i].r=r;
21     tree[i].data = 0;
22     if(l==r)
23     {
24         return ;
25     }
26     int mid=(l+r)/2;
27     build_tree(i*2,l,mid);
28     build_tree(i*2+1,mid+1,r);
29     push_up(i); //理论上讲,建树不用加这个,加了也不错
30 }
31 void updata(int i,int k,int v)//更新
32 {
33     if(tree[i].l==k&&tree[i].r==k)
34     {
35         tree[i].data=v;
36         return ;
37     }
38     int mid=(tree[i].l+tree[i].r)/2;
39     if(k<=mid)      //这里要是不懂,可以类比二叉排序树
40         updata(i*2,k,v);
41     else
42         updata(i*2+1,k,v);
43     push_up(i); //更新应该要加的啊哦,更新完以后,更新这个点的最小值
44 }
45
46 int query(int i,int l,int r)//查询
47 {
48     if(l<=tree[i].l&&tree[i].r<=r)
49     {
50         return tree[i].data;
51     }
52     int mid=(tree[i].l+tree[i].r)/2;
53     if(r<=mid)   //如果R都小于MID了,说明一定是从左孩子节点来的(这里一开始怒错无数次,后来这样写过了,至今不知道为什么....)
54         return query(i*2,l,r);
55     if(l>mid)    //如果L都大于MID了,说明一定是从右孩子节点来的
56         return query(i*2+1,l,r);
57     return min(query(i*2,l,r),query(i*2+1,l,r));//否则是从两个孩子节点来的,比较出最小值返回
58 }
59 int main()
60 {
61     int n,m,top = 0;
62     scanf("%d%d",&m,&n);
63     build_tree(1,1,m);
64     for(int i=1;i<=m;i++)
65     {
66         int account;
67         scanf("%d",&account);
68         updata(1,i,account);
69     }
70     for(int i=1;i<=n;i++)
71     {
72         int l,r;
73         scanf("%d%d",&l,&r);
74         ans[top++] = query(1,l,r);
75     }
76     for(int i=0;i<top-1;i++)
77         printf("%d ",ans[i]);
78     printf("%d",ans[top - 1]);//输出有点坑
79 }

当然也可以不要更新节点的函数,建树的时候直接把n组账单的值直接建到树里

我这种写法只是更具有一般性啦

posted @ 2016-08-11 13:43 swallowblank 阅读(...) 评论(...) 编辑 收藏

【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...相关推荐

  1. 计蒜客 2238 礼物 期望 + 线段树 + 归并

    题目链接:T2238   礼物 考虑 $[l,r]$ 区间中哪些二元组是优秀二元组: 发现将二元组的 $x$ 按照从大到小排序,若 $y[i]$ 是这个前缀的最大值,则该二元组是优秀的. 因为数据是随 ...

  2. [计蒜客T2238]礼物_线段树_归并排序_概率期望

    礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...

  3. 计蒜客 - Distance on the tree(树链剖分+离线处理+线段树)

    题目链接:点击查看 题目大意:给出一颗含有n个节点的树,每条边都有权值,现在给出m个询问,每次询问的格式为u,v,w,我们需要求出在路径u-v上,边权小于等于w的边的个数 题目分析:因为一开始不会主席 ...

  4. M - Kill the tree 计蒜客 - 42552(2019icpc徐州/树的重心/树形dp)

    vj地址 题目大意:找到每一颗子树的重心 思路: 树的重心的性质: 树的重心如果不唯一,则至多有两个,且这两个重心相邻 通过连接一条端点分别在两个树的边,来将两个树合并成一个,那么新的重心肯定是在原来 ...

  5. 计蒜客-青出于蓝胜于蓝 dfs+树状数组

    题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...

  6. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  7. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  8. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  9. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

最新文章

  1. 黑马程序员Linux系统开发视频之gdb调试方法
  2. ArcEngine二次开发_02(鼠标移过图层中显示特定的属性信息)
  3. go 递归tree关系_Go实现一个二叉搜索树
  4. 20145235李涛《网络对抗》逆向及Bof基础
  5. Robot Motion(模拟题bfs)
  6. 微信小程序内链微信公众号的方法
  7. 密码日记本密码忘记了怎样打开
  8. 主机安全加固终端安全管理
  9. 拼多多网站的服务器多大,拼多多打不开网页怎么回事
  10. javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)
  11. 面试自我介绍和简历上的内容能不能相同?
  12. Zero-Shot Deep Domain Adaptation[reading notes]
  13. C语言10进制转2进制
  14. php做网站需要的技术,建网站需要什么技术
  15. linux电子相册,基于Linux电子相册的.doc
  16. ChatGpt替代医生可能性分析
  17. 【Unity】雷达 + 照片墙效果
  18. 采用开盘价交易的方法
  19. Precision 3561 初体验
  20. 从 “搞不清楚” 到 “都明白了” 的费曼

热门文章

  1. 计算机网络(基带和带通调制与编码方法、波特率和比特率、奈氏准则和香农公式、信道复用技术 [ FDM、TDM、STDM、WDM、CDMA ] )
  2. PyCharm安装教程(2023年,3月)
  3. 1029.Median (25)
  4. 楼盘数据可视化与预测分析
  5. 连分数matlab,浅谈指数分布的性质及其应用.doc
  6. Java修饰符大汇总
  7. 春暖花开,抛丸机型号也很抢眼!
  8. 精华篇--改变--今日事 今日毕
  9. 阿男教你修鼠标——拯救双击的G402
  10. 2022 1.4 补题