Cod sursa(job #2134633)

Utilizator TDSerbanTarmure Serban TDSerban Data 18 februarie 2018 10:27:22
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <algorithm>
#define ZERO 0
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int N,Table[100001][19];
int Q,k,p;
int main()
{
    fi>>N>>Q;
    for (int i=1;i<=N;i++)
        fi>>Table[i][0];
    /// se construieste Table
    k=0;
    p=1;
    while (p*2<=N)
    {
        k++;
        p=p*2;
    }
    for (int j=1;j<=k;j++)
        for (int i=1;i<=N-(1<<j)+1;i++)
            Table[i][j]=min(Table[i][j-1],Table[i+(1<<(j-1))][j-1]);
    /// interogari
    for (int q=1;q<=Q;q++)
    {
        int st,dr;
        fi>>st>>dr;
        int answer;
        answer=100001;
        for (int j=k;j>=0;j--)
            if (st+(1<<j)-1<=dr)
            {
                answer=min(answer,Table[st][j]);
                st=st+(1<<j);
            }
        fo<<answer<<"\n";
    }
    fi.close();
    fo.close();
    return 0;
}