Cod sursa(job #1274185)

Utilizator Darius15Darius Pop Darius15 Data 23 noiembrie 2014 15:28:26
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <fstream>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,i,j,a[100001],p,s,d,nr,ma[100001][30],lg[100001];
int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
        f>>a[i],ma[i][0]=a[i];
    for (i=1,p=1;p<=n;i++,p*=2)
        for (j=1;j+p-1<=n;j++)
        ma[j][i]=min(ma[j][i-1],ma[j+p/2][i-1]);
       for (i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;
       for (i=1;i<=m;i++)
       {
           f>>s>>d;
            nr=lg[s-d+1];
            g<<min(ma[s][nr],ma[d-(1<<nr)+1][nr])<<'\n';
       }

        return 0;
}