Cod sursa(job #1805389)

Utilizator cosminmaneaCosmin Manea cosminmanea Data 13 noiembrie 2016 18:45:12
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#include <vector>

using namespace std;

int heap[100010],mn;

FILE *g=fopen("rmq.out","w");

void update(int ind,int li,int lf,int &i,int &x)
{
    if(li==lf)heap[ind]=x;
    else
    {
        int m=(li+lf)/2;
        if(i<=m)update(2*ind,li,m,i,x);
        else update(2*ind+1,m+1,lf,i,x);
        heap[ind]=heap[2*ind]>heap[2*ind+1]?heap[2*ind]:heap[2*ind+1];
    }
}

void get_min(int ind,int li,int lf,int a,int b)
{
    if(a<=li&&lf<=b)
        mn=mn>=heap[ind]?heap[ind]:mn;
    int m=(li+lf)/2,m1;
    if(a<=m)
        get_min(2*ind,li,m,a,b);
    if(b>=m+1)
        get_min(2*ind+1,m+1,lf,a,b);
    fprintf(g,"%d\n",mn);
}

int main()
{
    FILE *f=fopen("rmq.in","r");
    int n,m,i,x;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;++i)
    {
        fscanf(f,"%d",&x);
        update(1,1,n,i,x);
    }
    int a,b;
    for(i=1;i<=m;++i)
    {
        mn=200100;
        fscanf(f,"%d%d",&a,&b);
        get_min(1,1,n,a,b);
    }
    return 0;
}