Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

第一次用RMQ AC了!!pascal代码!太兴奋了

Posted by yang825641085 at 2011-07-25 19:52:57 on Problem 3264 and last updated at 2011-07-25 19:53:20
var f:array [0..50005,0..20,1..2] of longint;
    s:array [0..20] of longint;
    x,y,k,ans,len:longint;
    n,m,i,j,maxi:longint;
procedure doit;
var x,i:longint;
begin
  x:=1;i:=0;
  while x<=n do
    begin
      s[i]:=x;
      x:=x*2;
      inc(i);
    end;
  maxi:=i-1;
end;
function max(a,b:longint):longint;
begin
  if a>b then exit(a) else exit(b);
end;
function min(a,b:longint):longint;
begin
  if a<b then exit(a) else exit(b);
end;
function check(len:longint):longint;
var i:longint;
begin
  for i:=1 to maxi do
    if len<s[i] then break;
  if len<s[i] then exit(i-1) else exit(i);
end;
begin
  readln(n,m);
  for i:=1 to n do
    begin
      readln(x);
      f[i,0,1]:=x;
      f[i,0,2]:=x;
    end;
  doit;
  for j:=1 to maxi do
    for i:=1 to n-s[j-1] do
      begin
        f[i,j,1]:=max(f[i,j-1,1],f[i+s[j-1],j-1,1]);
        f[i,j,2]:=min(f[i,j-1,2],f[i+s[j-1],j-1,2]);
      end;
  for i:=1 to m do
    begin
      readln(x,y);
      len:=y-x+1;
      k:=check(len);
      ans:=max(f[x,k,1],f[y-s[k]+1,k,1])-min(f[x,k,2],f[y-s[k]+1,k,2]);
      writeln(ans);
    end;
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator