Cod sursa(job #1957823)

Utilizator the.manIon Man the.man Data 7 aprilie 2017 19:56:03
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int N,M,rmq[100005][20];
// rmq[i][j][k] = elementul de valoare maxima dintr-un sir
            // cu primul elem pe pozitia i lungimea 2^k

void Build()
{
for(int i=1;i<=N;i++) fi>>rmq[i][0];

for(int k=1;(1<<k) <= N;k++)
for(int i=1;i+(1<<k)-1<=N;i++)
rmq[i][k]=min(rmq[i][k-1],rmq[i+(1<<k)-1][k-1]);

}

int Query(int i,int j)
{
int L=log2(j-i);
return min(rmq[i][L],rmq[j-(1<<L)+1][L]);
}

int main ()
{
fi>>N>>M;
Build();

while(M--)
{
    int i,j;
    fi>>i>>j;
    fo<<Query(i,j)<<'\n';
}

return 0;
}