Cod sursa(job #2871961)

Utilizator RK13Barbu Eduard RK13 Data 16 martie 2022 08:22:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int rmq[21][100001],n,m,exponent[100001],putere[21];

void calc()
{
int x=2,k=1;
while (x<=n)
{
for (int i=1;i<=n-x+1;i++) rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+x/2]);
x*=2;
k++;
}
}

int main()
{int x=1,k=0,y,z;
f>>n>>m;
for (int i=1;i<=n;i++) f>>rmq[0][i];
for (int i=1;i<=n;i++) {if (x*2==i) x*=2,k++;
                        exponent[i]=k,putere[k]=x;

                       }
calc();
for (int i=1;i<=m;i++) {f>>x>>y;
                        k=exponent[y-x+1];
                        z=putere[k];
                        g<<min(rmq[k][x],rmq[k][y-z+1])<<'\n';
                       }
}