Cod sursa(job #3169881)

Utilizator BOSSSTEFANPetrescu Ioan Stefan BOSSSTEFAN Data 16 noiembrie 2023 11:11:19
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <cmath>
using namespace std;
int v[100001];
int b[801];
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int main()
{
    int n,i,l,j,m,rez;
    cin>>n>>m;
    l=sqrt(n);
    for(i=0;i<=800;i++)
      b[i]=1e7;
    for(i=0,j=-1;i<n;i++)
    {
      cin>>v[i];
      if(i%l==0)
        j++;
      b[j]=min(b[j],v[i]);
    }
    int st,dr,k;
    while(m>0)
    {
      m--;
      cin>>st>>dr;
      st--;
      dr--;
      rez=1e7;
      while(st<=dr&&st%l!=0)
      {
        rez=min(rez,v[st++]);
      }
      while(st<=dr&&dr%l!=l-1)
      {
        rez=min(rez,v[dr--]);
      }
      k=st/l;
      while(st<dr)
      {
        rez=min(rez,b[k++]);
        st+=l;
      }
      cout<<rez<<'\n';
    }
    return 0;
}