P1699: [Usaco2007 Jan]Balanced Lineup排队

很明显是一道RMQ问题,倍增法,维护一下区域的最大/小值就行了。

 1 var n,i,j,q,f,t,times:longint;
 2 hmin,hmax:array[0..100,0..50000] of longint;
 3 function min(a,b:longint):longint;
 4 begin
 5   if a>b then exit(b)
 6     else exit(a);
 7 end;
 8 function max(a,b:longint):longint;
 9 begin
10   if a>b then exit(a)
11     else exit(b);
12 end;
13 begin
14   readln(n,q);
15   for i:=1 to n do
16     begin
17       readln(hmax[0,i]);
18       hmin[0,i]:=hmax[0,i];
19     end;
20   for i:=1 to trunc(ln(n)/ln(2))+1 do
21     for j:=1 to n-(1 shl i)+1 do
22       begin
23         hmin[i,j]:=min(hmin[i-1,j],hmin[i-1,j+(1 shl (i-1))]);
24         hmax[i,j]:=max(hmax[i-1,j],hmax[i-1,j+(1 shl (i-1))]);
25       end;
26   for i:=1 to q do
27     begin
28       readln(f,t);
29       times:=trunc(ln(t-f+1)/ln(2));
30       writeln(max(hmax[times,f],hmax[times,t-(1 shl times)+1])-
31               min(hmin[times,f],hmin[times,t-(1 shl times)+1]));
32     end;
33 end.
时间: 2024-10-06 21:17:02

P1699: [Usaco2007 Jan]Balanced Lineup排队的相关文章

bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队 分块

1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MB Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的

[bzoj 1699] [Usaco2007 Jan]Balanced Lineup排队

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1699 [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1443  Solved: 920[Submit][Status][Discuss] Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一

BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队

1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 933  Solved: 568[Submit][Status] Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. Jo

[Usaco2007 Jan]Balanced Lineup排队

[Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1424 Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q &l

BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树

题意:链接 方法:线段树 解析: 题意即题解. 多次询问区间最大值与最小值的差,显然直接上线段树或者rmq维护区间最值即可. 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 50010 #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #def

[BZOJ] 1636: [Usaco2007 Jan]Balanced Lineup

1636: [Usaco2007 Jan]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 909  Solved: 644[Submit][Status][Discuss] Description For the daily milking, Farmer John's N cows (1 <= N <= 50,000) always line up in the same order. One day Farmer

BZOJ1636: [Usaco2007 Jan]Balanced Lineup

1636: [Usaco2007 Jan]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 476  Solved: 345[Submit][Status] Description For the daily milking, Farmer John's N cows (1 <= N <= 50,000) always line up in the same order. One day Farmer John deci

[Usaco2007 Jan] Balanced Lineup

Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1640  Solved: 1041 Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的选择和所有牛的身高 (1

【bzoj1699/USACO2007】Balanced Lineup排队——RMQ问题

题目链接 很明显的求区间最大最小值问题,可以用st表做,不过ccz 大爷教我用zkw线段树来解决这种问题,感觉很好用>< 对于1~n的序列,我们先转化成0~n-1,(方便之后的xor),然后求一个最小的mx=(1<<i)使得mx>=n,这样就保证了是一棵满二叉树,叶子结点为0~mx-1. 然后考虑对于每层建立一个数组tr[mx],拿最顶层来说,我们可以把它根据左右子树划分为0~mx/2-1,mx/2~mx-1,这样的话当i<=mx/2-1时,tr[i]即为i~mx/2-