Pagini recente » Cod sursa (job #1854808) | Cod sursa (job #643648) | Cod sursa (job #7249) | Cod sursa (job #3158087) | Cod sursa (job #593824)
Cod sursa(job #593824)
#include <iostream>
#include <fstream>
using namespace std;
long N, M, Log2[100010], X[100010], QA, QB, RMQ[20][100010];
inline long Min (long a, long b)
{
if (a>b)
{
return b;
}
return a;
}
long Putere (long n)
{
return (1<<n);
}
void BuildRMQ ()
{
long i, j;
for (j=1; j<=N; j++)
{
RMQ[0][j]=X[j];
}
for (i=1; i<=Log2[N]; i++)
{
for (j=1; j<=N; j++)
{
RMQ[i][j]=Min (RMQ[i-1][j], RMQ[i-1][j+Putere(i-1)]);
}
}
}
int main()
{
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
long i, j, L;
fin >> N >> M;
for (i=1; i<=N; i++)
{
Log2[i]=Log2[i/2]+1;
Log2[1]=0;
fin >> X[i];
}
BuildRMQ ();
for (; M>0; M--)
{
fin >> QA >> QB;
L=QB-QA+1;
fout << Min (RMQ[Log2[L]][QA], RMQ[Log2[L]][QA+L-Putere(Log2[L])]) << "\n";
}
fin.close ();
fout.close ();
return 0;
}