Pagini recente » Cod sursa (job #1899438) | Cod sursa (job #1213815) | Cod sursa (job #1140906) | Cod sursa (job #50466) | Cod sursa (job #2761543)
#include <iostream>
#include <fstream>
using namespace std;
int numar_elemente, numar_intrebari;
int capat_stang, capat_drept;
int matrice[31][100001];
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> numar_elemente;
fin >> numar_intrebari;
for(int i = 1; i <= numar_elemente; i++)
fin >> matrice[0][i];
int k = 1;
for(int p = 2; p <= numar_elemente; p *= 2)
{
for(int j = 1; j <= numar_elemente; j++)
if(matrice[k - 1][j + p/2] < matrice[k-1][j])
matrice[k][j] = matrice[k-1][j + p/2];
else
matrice[k][j] = matrice[k-1][j];
k++;
}
for(int i = 0; i < numar_intrebari; i++)
{
fin >> capat_stang >> capat_drept;
int linie = 0, p = 1;
while(p * 2 <= capat_drept - capat_stang + 1)
{
p *= 2;
linie++;
}
if(matrice[linie][capat_stang] < matrice[linie][capat_drept - p + 1])
fout << matrice[linie][capat_stang] << '\n';
else
fout << matrice[linie][capat_drept - p + 1] << '\n';
}
return 0;
}