Cod sursa(job #2871983)

Utilizator mariaionescu2006Ionescu Maria mariaionescu2006 Data 16 martie 2022 09:46:44
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int inf=1061109567,nmax=100002;
int a[nmax],sq[nmax],rt,n,m,i,j,x,y,ls,ld;
int main()
{
    fin >>n>>m;
    for (i=1;i<=n;i++)
         fin >>a[i];
    while (rt*rt<=n)
           rt++;
    rt--;
    for (i=1;i*rt<=n;i++)
        {sq[i]=inf;
         for (j=rt*(i-1)+1;j<=rt*i;j++)
			  sq[i]=min(sq[i],a[j]);}
    for (i=1;i<=m;i++)
        {int mn=inf;
         fin >>x>>y;
         j=1;
         while (rt*j<x)
                j++;
         j++;
         ls=min(rt*(j-1),y);
		 for (;rt*j<=y;j++)
			  mn=min(mn,sq[j]);
		 ld=max(rt*(j-1),x);
         for (j=x;j<=ls;j++)
			  mn=min(mn,a[j]);
		 for (j=ld;j<=y;j++)
			  mn=min(mn,a[j]);
         fout <<mn<<'\n';}
    return 0;
}