Cod sursa(job #2154570)

Utilizator Tataru_AdelinTataru Adelin Tataru_Adelin Data 7 martie 2018 08:32:17
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,p;
vector<vector<int>> rmq;
void citire(),add_line(int);

int main()
{
    citire();
    for(int i=1;(1<<i)<=n;i++)
        add_line(i);
    for(;m;m--)
    {
        int x,y,lg,i;
        f>>x>>y;
        lg=y-x+1;
        i=31-__builtin_clz(lg);
        lg=1<<i;
        g<<min(rmq[i][x],rmq[i][y-lg+1])<<'\n';

    }
    return 0;
}
void citire()
{
    f>>n>>m;
    vector<int> x(n+5,0);
    for(int i=1;i<=n;i++)
        f>>x[i];
    rmq.push_back(x);

}
void add_line(int i)
{
    vector<int> x(n+1,0);
    int st=1,dr=1<<p,mi;
    mi=p/2;
    for(;dr<=n;st++,mi++,dr++)
        x[st]=min(rmq[i-1][st],rmq[i-1][mi]);
    rmq.push_back(x);
}