Pagini recente » Cod sursa (job #353005) | Cod sursa (job #1150003) | Cod sursa (job #1554956) | Cod sursa (job #2605129) | Cod sursa (job #1046215)
//
// main.cpp
// rmq
//
// Created by Catalina Brinza on 12/2/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{int rmq[100001][20];
int n,i,x,m,y,l,j;
f>>n>>m;
for (i=0;i<n;++i)
{
f>>rmq[i][0];
}
for (l=1;(1<<l)<n;++l)
for (i=0;i<n;++i)
{
rmq[i][l]=rmq[i][l-1];
if (i+(1<<(l-1))<n && rmq[i][l]>rmq[i+(1<<(l-1))][l-1])
rmq[i][l]=rmq[i+(1<<(l-1))][l-1];
}
for (i=0;i<m;++i)
{
f>>x>>y;
--x;--y;
bool ok=false;
if (x>y)
{
int aux=x;
x=y;
y=aux;
}
else if (x==y) {g<<rmq[x][0]<<"\n";ok=true;}
int l=y-x+1;
int max=log2(l);
if (!ok){
if (rmq[x][max]<rmq[y-(1<<max)+1][max]) g<<rmq[x][max]<<"\n";
else g<<rmq[y-(1<<max)+1][max]<<"\n";}
}
return 0;
}