竹園論壇
標題:
d539 - 區間 MAX
[打印本頁]
作者:
Sylveon
時間:
2014-4-17 15:42
標題:
d539 - 區間 MAX
原文:
http://zerojudge.tw/ShowProblem?problemid=d539
AC :
http://zerojudge.tw/Submissions?problemid=d539&account=lfs92002
ACCODE:
http://ideone.com/hNLD12
區間最大值,裸RMQ問題,用個線段樹就能無CE無DBG無壓力輕鬆AC。
/**********************************************************************************/
/* Problem: d539 "區間 MAX" from RMQ */
/* Language: CPP (817 Bytes) */
/* Result: AC(0.5s, 8.2MB) judge by this@ZeroJudge */
/* Author: lfs92002 at 2014-04-17 15:31:11 */
/**********************************************************************************/
#include<cstdio>
#include<algorithm>
using namespace std;
#define rmq 1,N,0
int data[500000*4];
int N,M,in;
void update(int id,int v,int L,int R,int i)
{
if(L==R){
data[i]=v;
return;
}
int M=(L+R)/2;
if(id<=M)update(id,v,L ,M,i*2+1);
else update(id,v,M+1,R,i*2+2);
data[i]=max(data[i*2+1],data[i*2+2]);
}
int find(int l,int r,int L,int R,int i)
{
if(L==l&&R==r)return data[i];
int M=(L+R)/2;
if(r<=M)return find(l,r,L ,M,i*2+1);
if(M< l)return find(l,r,M+1,R,i*2+2);
return max( find(l ,M,L ,M,i*2+1),
find(M+1,r,M+1,R,i*2+2));
}
int main()
{
int a,b;
scanf("%d",&N);
for(int i=1;i<=N;++i){
scanf("%d",&in);
update(i,in,rmq);
}
scanf("%d",&M);
while(M--)
{
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
printf("%d\n",find(a,b,rmq));
}
}
歡迎光臨 竹園論壇 (http://forum.tfcis.org/)
Powered by Discuz! X3.2