tyvj1038--忠诚(线段树)
来源:互联网 发布:绵阳长虹网络公司地址 编辑:程序博客网 时间:2024/04/24 07:36
描述 Description
老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。
在询问过程中账本的内容可能会被修改
输入格式 Input Format
输入中第一行有两个数m,n表示有m(m<=100000)笔账,n表示有n个问题,n<=100000。
接下来每行为3个数字,第一个p为数字1或数字2,第二个数为x,第三个数为y
当p=1 则查询x,y区间
当p=2 则改变第x个数为y
输出格式 Output Format
输出文件中为每个问题的答案。具体查看样例。
样例输入 Sample Input
10 3
1 2 3 4 5 6 7 8 9 10
1 2 7
2 2 0
1 1 10
样例输出 Sample Output
2 0
时间限制 Time Limitation
各个测试点1s
解析:
线段树或者rmq可做。。。
本人用线段树实现,1操作就query(1,1,n,x,y),查询x-y区间。
2操作就update(1,1,n,x,y),把x变为y。
代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int inf=1000000000;const int N=100000+10;int minn[4*N];int n,m,mi;int a[N];void readdata(){ freopen("tyvj1038.in","r",stdin); freopen("tyvj1038.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]);}void build(int p,int l,int r){ if(l==r){minn[p]=a[l];return;} int mid=(l+r)>>1; build(p<<1,l,mid); build((p<<1)+1,mid+1,r); minn[p]=min(minn[p<<1],minn[(p<<1)+1]);}void update(int p,int l,int r,int x,int y){ if(l==r && r==x){minn[p]=y;return;} int mid=(l+r)>>1; if(x<=mid)update(p<<1,l,mid,x,y); else update((p<<1)+1,mid+1,r,x,y); minn[p]=min(minn[p<<1],minn[(p<<1)+1]);}int query(int p,int ll,int rr,int l,int r){ if(l<=ll && rr<=r){return mi=minn[p];} int mid=(ll+rr)>>1; if(r<=mid) return query(p<<1,ll,mid,l,r); else if(l>mid) return query((p<<1)+1,mid+1,rr,l,r); else return min( query(p<<1,ll,mid,l,mid) , query((p<<1)+1,mid+1,rr,mid+1,r) );}void work(){ int op,a,b; build(1,1,n); for(int i=1;i<=m;i++) { scanf("%d%d%d",&op,&a,&b); if(op==1) printf("%d ",query(1,1,n,a,b)); else update(1,1,n,a,b); }}int main(){ readdata(); work(); return 0;}
- tyvj1038--忠诚(线段树)
- tyvj1038忠诚
- tyvj1038忠诚
- 【tyvj1038】忠诚
- 【tyvj1038】忠诚
- tyvj1038忠诚题解
- p 1038 忠诚 线段树(水)
- codeevs 2173 忠诚(线段树)
- JD2715 忠诚2——线段树(线段树裸题)
- tyvj P1038 忠诚 线段树
- 忠诚{线段树&树状数组}
- luogu 1816忠诚 线段树
- 胜者树(线段树RMQ)——Luogu1816 忠诚
- 计蒜客 管家的忠诚(二) 线段树(水题续)
- tyvj:1038 忠诚 线段树 区间查询
- 计蒜客 管家的忠诚 线段树
- 计蒜客 管家的忠诚(二) 线段树
- 计蒜客 管家的忠诚(线段树水题)
- 【编程语言】Android--基础速览
- 基于商家现有WiFi网络就能监测客流,线下商店的Google Analytics—Euclid获1730万美元B轮融资
- js作用域
- tocloft包与subfigure包冲突
- 开发者推出Shopper Tracker,基于Kinect API打造的实体商店版Google Analytics(视频演示)
- tyvj1038--忠诚(线段树)
- 基本数据类型的表现形式(浮点数)
- Probabilistic Graphical Models 2 Bayesian Network Fundamentals
- poj2777Count color(线段树)
- 卜算子·咏梅
- 关于UIView的autoresizingMask属性的研究
- 【hadoop】大规模中文网站聚类kmeans的mapreduce实现(下)
- GBK和UTF-8互换
- 设计模式之--代理模式