1278. 排队 (Standard IO)
来源:互联网 发布:算法导论英文版 pdf 编辑:程序博客网 时间:2024/06/03 06:08
Description
每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛.但是为了避免水平悬殊,牛的身高不应该相差太大.John 准备了Q (1 <= Q <= 180,000) 个可能的牛的选择和所有牛的身高 (1 <=身高 <= 1,000,000). 他想知道每一组里面最高和最低的牛的身高差别.
Input
第一行: N 和 Q.第2..N+1行: 第i+1行是第i头牛的身高.第N+2..N+Q+1行: 两个整数, A 和 B (1 <= A <= B <= N), 表示从A到B的所有牛.
Output
第1..Q行: 所有询问的回答 (最高和最低的牛的身高差), 每行一个.
Sample Input
6 31734251 54 62 2
Sample Output
630
思路
O(logn)线段树,记录每个区间内最大和最小的值。
var a:array[1..200000] of longint; f:array[1..200000,1..2] of longint; min,max,x:longint;procedure js(l,r,i:longint);var mid:longint;begin mid:=(l+r) div 2; if l=r then begin inc(x); f[i,1]:=a[x]; f[i,2]:=a[x]; end else begin js(l,mid,i*2); js(mid+1,r,i*2+1); f[i,1]:=f[i*2,1]; if f[i*2+1,1]<f[i,1] then f[i,1]:=f[i*2+1,1]; f[i,2]:=f[i*2,2]; if f[i*2+1,2]>f[i,2] then f[i,2]:=f[i*2+1,2]; end;end;procedure z(l,r,p,q,i:longint);var mid:longint;begin mid:=(l+r) div 2; if (l=p) and (r=q) then begin if f[i,1]<min then min:=f[i,1]; if f[i,2]>max then max:=f[i,2]; exit; end; if q<=mid then z(l,mid,p,q,i*2) else if p>mid then z(mid+1,r,p,q,i*2+1) else begin z(l,mid,p,mid,i*2); z(mid+1,r,mid+1,q,i*2+1); end;end;var i,j,n,m,p,q:longint;begin readln(n,m); for i:=1 to n do readln(a[i]); js(1,n,1); for i:=1 to m do begin readln(p,q); min:=maxlongint; max:=0; z(1,n,p,q,1); writeln(max-min); end;end.
阅读全文
1 2
- 1278. 排队 (Standard IO)
- 奶牛排队 (Standard IO)
- 奶牛排队 (Standard IO)
- Window (Standard IO)
- Party (Standard IO)
- 1326. Window (Standard IO)
- 遥控车 (Standard IO)
- Mobile Service (Standard IO)
- 舞台设置 (Standard IO)
- 拉力赛 (Standard IO)
- 车展 (Standard IO)
- 1328. Party (Standard IO)
- 三条线 (Standard IO)
- 绕圈跑 (Standard IO)
- 餐桌 (Standard IO)
- 直角三角形 (Standard IO)
- 佳肴 (Standard IO)
- 删除 (Standard IO)
- 线程池
- 5-12 指定位置输出字符串 (10分)
- 新闻或公告实现定时滚动的方法
- redis的事务(redis的watch,multi,exec用法)
- 19.移除链表倒数第n个节点
- 1278. 排队 (Standard IO)
- 初学C++
- git常用命令
- MinGW安装
- 在CentOS安装CMake
- 项目中tomcat 下配置HTTPS
- 四大标签
- Android——Fragment中通过给每个Fragment设置开场动画进入
- Hibernate开启收集缓存统计信息