Pagini recente » Cod sursa (job #2174060) | Cod sursa (job #893026) | Cod sursa (job #2956460) | Cod sursa (job #2272467) | Cod sursa (job #2624659)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,i,j,p,a[50][100000];
int main()
{
f>>n>>m;
for(i=1; i<=n; i++)
f>>a[0][i];
for(i=1; (1<<i)<=n; i++)
for(j=1; j<=n; j++)
a[i][j]=min(a[i-1][j], a[i-1][j+(1<<(i-1))]); /// a[i][j] = minimul pe intervalul [j, j + 2 ^ i]
while(m)
{
f>>i>>j;
p=0;
while((1<<p)<=j+1-i)
p++;
p--; /// aflam p astef incat 2 ^ p < lungimea intervalului, p - maxim posibil
g << min(a[p][i], a[p][j+1-(1<<p)])<<endl;
m--;
}
return 0;
}