Cod sursa(job #2874814)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 20 martie 2022 11:59:07
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
const int PTMAX=35;
const int NMAX=1e5+5;

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int a[PTMAX][NMAX];
int i, n, m, putere, j, x, y, gasit;

int pt(int i)
{
    return (1<<i);
}

int cpt(int dif)
{
    int pt=1, i=0;
    while(pt<dif)
    {
        pt*=2;
        i++;
    }
    return i-1;
}

int main()
{
    fin>>n>>m;
    for(i=1; i<=n; i++) fin>>a[0][i];
    for(i=1; pt(i)<=n; i++)
    {
        putere=pt(i);
        for(j=putere; j<=n; j++)
        {
            //fout<<a[i-1][j]<<' '<<a[i-1][j-(putere/2)]<<'\n';
            a[i][j]=min(a[i-1][j], a[i-1][j-(putere/2)]);
            //fout<<j-putere+1<<' '<<j<<' '<<a[i][j]<<'\n';
        }
    }
    for(i=1; i<=m; i++)
    {
        fin>>x>>y;
        gasit=cpt(y-x+1);
        //fout<<gasit<<' '<< a[gasit][y]<<' '<<a[gasit][x+gasit]<<'\n';
        fout<<min(a[gasit][y], a[gasit][x+gasit])<<'\n';
    }
    return 0;
}