Cod sursa(job #3247127)

Utilizator oliv_1Bostinescu Octavian oliv_1 Data 5 octombrie 2024 18:27:20
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;
int vpow2[100005];
int mat[20][100005],n;
void construct()
{
    for(int p=1;p<=vpow2[n];p++)
    {
        for(int i=1;i<=n;i++)
        {
            mat[p][i]=min(mat[p-1][i],mat[p-1][i+(1<<(p-1))]);
        }
    }
}
int solve(int x,int y)
{
    int k=y-x+1;
    return(min(mat[vpow2[k]][x],mat[vpow2[k]][y-vpow2[k]]));
}
int main()
{
  ifstream cin("rmq.in");
  ofstream cout("rmq.out");

    for(int i=2;i<=100000;i++)
    vpow2[i]=vpow2[i/2]+1;
    int q,x,y;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        cin>>mat[0][i];
    construct();
    for(int i=0;i<q;i++)
    {
        cin>>x>>y;
        cout<<solve(x,y)<<'\n';
    }
    return 0;
}