Pagini recente » Cod sursa (job #2483758) | Cod sursa (job #617993) | Cod sursa (job #2918542) | Cod sursa (job #1068347) | Cod sursa (job #2903289)
#include <iostream>
#include <bits/stdc++.h>
#define A 100005
#define B 17
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int M[A][B];
struct Query {
int st, dr;
};
void preprocess(int v[], int n)
{
int i,j;
for(i=0; i<n; i++)
M[i][0]=i;
for(j=1; (1<<j)<=n; j++)
{
for (i=0; (i+(1<<j)-1)<n; i++)
{
if (v[M[i][j-1]] < v[M[i+(1<<(j-1))][j-1]])
M[i][j] = M[i][j-1];
else
M[i][j]=M[i+(1<<(j-1))][j-1];
}
}
}
int query(int v[], int st, int dr)
{
int j=(int)log2(dr-st+1);
if (v[M[st][j]]
<= v[M[dr-(1<<j)+1][j]])
return v[M[st][j]];
else
return v[M[dr-(1<<j)+1][j]];
}
void RMQ(int v[], int n, Query q[], int m)
{
int i,st,dr;
preprocess(v,n);
for (i=0; i<m; i++)
{
st=q[i].st;
dr=q[i].dr;
g<< query(v,st,dr) << endl;
}
}
int main()
{
int n,m,i,a,b;
f>>n>>m;
int v[n];
for(i=0;i<n;i++)
{
f>>v[i];
}
Query q[m];
for(i=0;i<m;i++)
{
f>>a;
a=a-1;
q[i].st=a;
f>>b;
b=b-1;
q[i].dr=b;
}
RMQ(v,n,q,m);
return 0;
}