【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)
最简单的线段树之一,中文题目,不翻译。。。。
注释讲的比较少,这已经是最简单的线段树,如果看不懂真的说明最基础的理论没明白
推荐一篇文章http://www.cnblogs.com/liwenchi/p/5760498.html
可能和我的线段树风格不一样,无所谓啦,多理解,理解了就可以自己编自己喜欢风格的模板
前排强势提醒!!!线段树的函数中只要涉及到区间(更新/查询),就有一个很容易出错的点。
详情见我的另一篇:http://www.cnblogs.com/liwenchi/p/5761257.html
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1000003
int ans[];
struct nod
{
int l,r;
int data;
}tree[*N]; void push_up(int i)
{
tree[i].data = min(tree[i*].data,tree[i*+].data);//更新tree[i]的最小值,由左孩子右孩子节点决定
}
void build_tree(int i,int l,int r)
{
tree[i].l=l;
tree[i].r=r;
tree[i].data = ;
if(l==r)
{
return ;
}
int mid=(l+r)/;
build_tree(i*,l,mid);
build_tree(i*+,mid+,r);
push_up(i); //理论上讲,建树不用加这个,加了也不错
}
void updata(int i,int k,int v)//更新
{
if(tree[i].l==k&&tree[i].r==k)
{
tree[i].data=v;
return ;
}
int mid=(tree[i].l+tree[i].r)/;
if(k<=mid) //这里要是不懂,可以类比二叉排序树
updata(i*,k,v);
else
updata(i*+,k,v);
push_up(i); //更新应该要加的啊哦,更新完以后,更新这个点的最小值
} int query(int i,int l,int r)//查询
{
if(l<=tree[i].l&&tree[i].r<=r)
{
return tree[i].data;
}
int mid=(tree[i].l+tree[i].r)/;
if(r<=mid) //如果R都小于MID了,说明一定是从左孩子节点来的(这里一开始怒错无数次,后来这样写过了,至今不知道为什么....)
return query(i*,l,r);
if(l>mid) //如果L都大于MID了,说明一定是从右孩子节点来的
return query(i*+,l,r);
return min(query(i*,l,r),query(i*+,l,r));//否则是从两个孩子节点来的,比较出最小值返回
}
int main()
{
int n,m,top = ;
scanf("%d%d",&m,&n);
build_tree(,,m);
for(int i=;i<=m;i++)
{
int account;
scanf("%d",&account);
updata(,i,account);
}
for(int i=;i<=n;i++)
{
int l,r;
scanf("%d%d",&l,&r);
ans[top++] = query(,l,r);
}
for(int i=;i<top-;i++)
printf("%d ",ans[i]);
printf("%d",ans[top - ]);//输出有点坑
}
当然也可以不要更新节点的函数,建树的时候直接把n组账单的值直接建到树里
我这种写法只是更具有一般性啦
【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)的更多相关文章
- 计蒜客 28315.Excellent Engineers-线段树(单点更新、区间最值) (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E)
先写这几道题,比赛的时候有事就只签了个到. 题目传送门 E. Excellent Engineers 传送门 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到 ...
- [计蒜客T2238]礼物_线段树_归并排序_概率期望
礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...
- 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)
query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...
- 计蒜客 38228. Max answer-线段树维护单调栈(The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer 南昌邀请赛网络赛) 2019ICPC南昌邀请赛网络赛
Max answer Alice has a magic array. She suggests that the value of a interval is equal to the sum of ...
- 计蒜客 Prefix Free Code(字典树+树状数组)
Consider n initial strings of lower case letters, where no initial string is a prefix of any other i ...
- 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)
学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
随机推荐
- vue 开发依赖安装
安装element-ui yarn add element-ui --save 使用element-ui main.js import Vue from 'vue'; import ElementUI ...
- 【转】实现Nginx代理WSS协议
https://blog.csdn.net/chopin407/article/details/52937645 后来看到了官网的教程(http://nginx.org/en/docs/http/we ...
- [转帖]一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS
一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS https://home.cnblogs.com/u/beyang/ 一台服务器,两个域名 首先购买https,获取到CA证 ...
- 自定义Attribute类
在我们的项目中有时经常会标识一些类的特性,在下面我们将简短的方式来介绍如何构建自定义的Attribute类. using System; using System.Collections.Generi ...
- 设计模式笔记:开闭原则(OCP,The Open-Closed Principle)
1. 开闭原则概述 开闭原则(OCP,The Open-Closed Principle)两个主要特征: (1)对扩展开放(open for extension):模块的行为的可以扩展的,当应用的需求 ...
- python functools.wraps functools.partial实例解析
一:python functools.wraps 实例 1. 未使用wraps的实例 #!/usr/bin/env python # coding:utf-8 def logged(func): de ...
- Oracle 查询两个时间段内的所有日期列表
1.查询某时间段内日期列表 select level,to_char(to_date('2013-12-31','yyyy-mm-dd')+level-1,'yyyy-mm-dd') as date_ ...
- Error: File 'C:\somepath\bin\ARM\Release\App_1.1.218.0_scale-100.appx' not found.
Hi Everyone, We are working on a fix for this issue as quickly as we can, but we have identified a w ...
- 使用js主函数的原因是等文档加载完了才给里面的元素添加东西 如果不使用主函数则文档加载时候无法找到元素则不能成功给元素添加事件
使用js主函数的原因是等文档加载完了才给里面的元素添加东西 如果不使用主函数则文档加载时候无法找到元素则不能成功给元素添加事件
- centOS7 下配置和启动maria数据库
从最新版本的linux系统开始,默认的是 Mariadb而不是mysql! 使用系统自带的repos安装很简单: yum install mariadb mariadb-server systemct ...