Pagini recente » Cod sursa (job #3125097) | Cod sursa (job #2328872) | Cod sursa (job #1794274) | Cod sursa (job #2565702) | Cod sursa (job #1172698)
#include <fstream>
using namespace std;
#define MAX 100001
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int *v[20], n, m, *log;
void initsparse();
void alocare();
int main()
{
int i, a, b, lg, rez;
fin>>n>>m;
alocare();
initsparse();
for(i=1; i<=m; i++){
fin>>a>>b;
lg = log[b-a+1];
rez = v[lg][a]<v[lg][b-(1<<lg)+1]?v[lg][a]:v[lg][b-(1<<lg)+1];
fout<<rez<<'\n';
}
return 0;
}
void initsparse()
{
int i, j;
for(i=1; i<=n; i++)
fin>>v[0][i];
log[0] = log[1] = 0;
for(i=2; i<=n; i++) log[i] = log[i/2]+1;
for(i=1; 1<<i<=n; i++)
for(j=1; j<=n - (1<<i)+1; j++)
v[i][j] = v[i-1][j]<v[i-1][j+1<<(i-1)]?v[i-1][j]:v[i-1][j+1<<(i-1)];
}
void alocare()
{
int i=0, len=1;
log = new int[n+1];
while(n-len>=0){
v[i++] = new int[n-len+2];
len<<=1;
}
}