Cod sursa(job #387475)
Utilizator | Dragos APOCALYPTO | Data | 27 ianuarie 2010 19:05:49 |
---|---|---|---|
Problema | Range minimum query | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.55 kb |
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
#define max(x,y) ((x)>(y)?(x):(y))
ofstream fout("rmq.out");
long lg[100005],(*RMQ)[20]=new long[100005][20],m,n,i,j,v[100005];
int main()
{
ifstream fin("rmq.in");
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>RMQ[i][0];
lg[1]=0;
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=m;i++)
{fin>>i>>j;
fout<<max(RMQ[i][lg[j-i+1]],RMQ[j-1<<lg[j-i+1]+1][lg[j-i+1]]);
}
fin.close();
fout.close();
return 0;
}