Pagini recente » Cod sursa (job #2441913) | Cod sursa (job #582101) | Borderou de evaluare (job #1004081) | Cod sursa (job #2539118) | Cod sursa (job #3279352)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
int n, m, dp[100001][20], logaritmi[100001];
memset( logaritmi, -1, sizeof(logaritmi) );
for( int i = 0; (1<<i) <= 100000; ++i )
{
logaritmi[1<<i] = i;
}
for( int i = 1; i <= 100000; ++i )
{
if( logaritmi[i] == -1 )
logaritmi[i] = logaritmi[i-1];
}
f >> n >> m;
for( int i = 1; i <= n; ++i )
{
f >> dp[i][0];
}
for( int i = 1; (1<<i) <= n; ++i )
{
for( int j = 1; j + (1<<(i-1)) <= n; ++j )
{
dp[j][i] = min(dp[j][i-1], dp[j+(1<<(i-1))][i-1]);
}
}
for( int i = 1; i <= m; ++i )
{
int x, y;
f >> x >> y;
g << min( dp[x][logaritmi[y-x+1]], dp[y-(1<<logaritmi[y-x+1])+1][logaritmi[y-x+1]] ) << "\n";
}
return 0;
}