Pagini recente » Cod sursa (job #597193) | Cod sursa (job #107251) | Cod sursa (job #658067) | Cod sursa (job #2372716) | Cod sursa (job #877236)
Cod sursa(job #877236)
#include <stdio.h>
#include<fstream>
#include <vector>
using namespace std;
#define nmax 100010
#define lmax 20
long int rmq[nmax][lmax], n,m, lg[nmax], a[nmax];
int main()
{
ifstream f("rmq.in");
ofstream g ("rmq.out");
long int i,j,l;
f>>n>>m;
for (i=1;i<=n;i++)
f>>a[i];
rmq[i][0]=i;
for(int j=1; (1<<j)<=n; j++)
for(int i=0; i+(1<<j)-1<n; i++)
if( a[ rmq[i][j-1] ] < a[ rmq[i+(1<<(j-1))][j-1] ] )
rmq[i][j] = rmq[i][j-1];
else
rmq[i][j] = rmq[i+(1<<(j-1))][j-1];
for(int i=2; i<=n; i++)
lg[i] = lg[i>>1] + 1;
for(int i=0; i<m; i++) {
int x, y;
f >> x >> y;
x--; y--;
int k = lg[y-x+1];
g<< min(a[rmq[x][k]], a[rmq[y-(1<<k)+1][k]]) << "\n";
}
return 0;
}