Mai intai trebuie sa te autentifici.
Cod sursa(job #1101838)
| Utilizator | Data | 9 februarie 2014 11:44:00 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.79 kb |
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
#define NMAX 100005
int RMQ[20][NMAX],N,Log2[NMAX],M;
void Init(){
for (int j = 1; j <= N; j++) {
f>>RMQ[0][j];
}
for (int i = 2; i <= N; i++) {
Log2[i] = Log2[i/2]+1;
}
}
void GenerateRMQ(){
for(int i=1;(1<<i)<=N;i++){
for(int j=1;j<=N-(1<<i)+1;j++){
RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+(1<<(i-1))]);
}
}
}
void Read(){
f>>N>>M;
Init();
GenerateRMQ();
int x,y;
for (int i = 1; i <= M; i++) {
f>>x>>y;
int dif = y-x+1;
int k = Log2[dif];
g<<min(RMQ[k][x],RMQ[k][y-(1<<k)+1])<<"\n";
}
}
int main()
{
Read();
return 0;
}