Pagini recente » Cod sursa (job #698444) | Cod sursa (job #1412948) | Cod sursa (job #2139840) | Cod sursa (job #1361379) | Cod sursa (job #900320)
Cod sursa(job #900320)
#include<fstream>
#define Nmax 100001
#define Num 20
using namespace std;
int n, v[Nmax], m[Num][Nmax], t, x, y, log[Nmax], num, lg, r, dif, rez, pas, lin, val, q;
void precalc()
{
num = 2 ;
lg = 0 ;
log[1] = 0 ;
for(int i = 2; i <= Nmax; ++i )
{
if( i == num )
{
num *= 2 ;
++ lg ;
}
log[i] = lg ;
}
}
int pow(int x, int y)
{
r = 1 ;
for(int i = 1; i <= y; ++i )
r *= x ;
return r ;
}
int main()
{
ifstream f("rmq.in");
ofstream h("rmq.out");
f >> n >> t;
for(int i = 1; i <= n; ++i )
{
f >> v[i];
m[1][i] = v[i] ;
}
pas = 1 ;
lin = 2 ;
while( 1 + pas <= n )
{
for(int i = 1; i <= n; ++i )
{
if( i + pas > n )
m[lin][i] = m[lin-1][i] ;
else
m[lin][i] = min( m[lin-1][i], m[lin-1][i+pas] ) ;
}
pas *= 2 ;
++lin ;
}
precalc() ;
for (q = 1; q <= t; ++q)
{
f >> x >> y;
dif = y - x ;
val = pow ( 2, log[dif] ) ;
rez = min( m[ log[dif] + 1 ][x], m[ log[dif] + 1 ][ y - val + 1 ] ) ;
h << rez << '\n';
}
return 0 ;
}