Mai intai trebuie sa te autentifici.
Cod sursa(job #388688)
Utilizator | Data | 30 ianuarie 2010 18:45:17 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.67 kb |
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
#define min(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],k;
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(j=1;j<=lg[n];j++)
for(i=1;i<=n-(1<<j)+1;i++)
RMQ[i][j]=min(RMQ[i][j-1],RMQ[i+(1<<(j-1))][j-1]);
for(k=1;k<=m;k++)
{fin>>i>>j;
fout<<min(RMQ[i][lg[j-i+1]],RMQ[j-(1<<lg[j-i+1])+1][lg[j-i+1]])<<'\n';
}
fin.close();
fout.close();
return 0;
}