Pagini recente » Borderou de evaluare (job #2172719) | Cod sursa (job #1219201) | Cod sursa (job #887552) | Cod sursa (job #1920125) | Cod sursa (job #1470451)
#include <iostream>
#include <fstream>
#define N 100005
#define logN 20
using namespace std;
int a[logN][N],n,m;
fstream f,g;
int main()
{
int i, j, x, y, putere;
f.open("rmq.in",ios::in);
g.open("rmq.out",ios::out);
f>>n>>m;
for ( i = 1 ; i <= n ; i++)
f>>a[0][i];
// facem matricea
// a[i][j] = min ( a[i] ...., a[i + 2^j -1 ] )// vect intial
// a[i][j] = min ( a[i-1][j], a[i-1][j+2^(i-1)] )
for (i = 1 ; (1<<i) <= n ; i++ )
for (j = 1 ; j + (1<<i) - 1 <=n ; j++ )
a[i][j] = min ( a[i-1][j], a[i-1][j + 1<<(i-1) ]);
// facem interogarile
// cautam cea mai mare put a lui 2 a.i sa fie inclusa in lungimea intervalului
// ne ducem pe coloana corespunzatoare matricei
// sol = min ( a[k][x], a[k][y-2^k + 1]
for (i = 1 ; i <= m ;i++)
{
f>>x>>y;
putere = 1;
while (1<<(putere +1 ) <= y-x)
putere ++;
g<<min(a[putere][x], a[putere][y - (1<<putere) + 1])<<"\n";
}
}