Pagini recente » Arhiva de probleme | Ședință 2009-10-23 | Cod sursa (job #3292669) | Rating Popescu Lucian (PopescuLucian) | Cod sursa (job #3294806)
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <fstream>
#include <iostream>
#include<cmath>
using namespace std;
const int NMAX = 1e5;
int rmq[NMAX],a[NMAX];
int b,n,m;
void rmq_bloc(){
int i=0;
while(i<n){
rmq[i/b]=a[i];
int j;
for(j=1;j<b && i+j<n;j++)
rmq[i/b]=min(rmq[i/b],a[i+j]);
i=i+j;
}
}
int query_bloc(int x, int y){
int r=a[x];
while(x<=y){
if (x%b==0 && x+b-1<y){
r=min(r,rmq[x/b]);
x=x+b;
}
else{
r=min(r,a[x]);
x+=1;
}
}
return r;
}
int main()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
int x,y;
f>>n>>m;
b=(int)log2(n);
for(int i=0;i<n;i++)
f>> a[i];
rmq_bloc();
for(int i=0;i<m;i++){
f>>x>>y;
g<<query_bloc(x-1,y-1)<<endl; //de la 0 indicii
}
f.close();
g.close();
return 0;
}