Cod sursa(job #2164859)

Utilizator aditzu7Adrian Capraru aditzu7 Data 13 martie 2018 10:08:23
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");

int sol,b,a2,j,t,a[100001],v[100001],n,m,i,j2;
int main()
{
 fscanf(f,"%d%d",&n,&m);
 for(i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);
 int w=sqrt(n);
 for(i=0;i<=n/w;i++){a[i]=100001;
 for(j=i*w+1;j<=min(i*w+w,n);j++){
    a[i]=min(a[i],v[j]);
 }
 }
 for(t=1;t<=m;t++){
    fscanf(f,"%d%d",&a2,&b);sol=100001;
    int j1=a2/w;
    j2=b/w;
    for(i=a2;i<=min(b,(j1+1)*w);i++)  sol=min(v[i],sol);
    for(j=j1+1;j<=j2-1;j++) sol=min(sol,a[j]);
    for(i=max((j2-1)*w+1,a2);i<=b;i++) sol=min(sol,v[i]);
    fprintf(g,"%d\n",sol);
 }

    return 0;
}