Pagini recente » Cod sursa (job #1432325) | Cod sursa (job #1037237) | Cod sursa (job #658252) | Rating rumburak (rumburak) | Cod sursa (job #2753853)
#include <bits/stdc++.h>
using namespace std;
int RMQ[100][100001],v[100001],lg[100001];
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int i,j,n,m, x, y,z,d,linie;
fin >> n >> m;
for( i = 1; i <= n; i++)
fin>> v[i];
for(i = 1; i <= n; i++)
RMQ[0][i] = v[i]; ///initializam prima linie cu vectorul
for( i = 1; pow(2,i) <= n; i++)///construim matricea
for ( j = 1; j+pow(2,i)-1<=n; j++)
RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1<<(i-1))]);
lg[1] = 0;
for(i=2; i <= n; i++) ///construim vectorul de puteri
lg[i] = lg[ i/2] + 1;
for (i = 0; i < m; i++)
{
fin>> x >> y;
z = y - x + 1;
linie = lg[z]; ///calculam linia din matrice pe care se afla rezulatul
d = z - (pow(2,linie));
fout<< min( RMQ[linie][x],RMQ[linie][x+d])<<'\n';
}
return 0;
}