Pagini recente » Cod sursa (job #299279) | Cod sursa (job #1712680) | Cod sursa (job #2270197) | Cod sursa (job #86867) | Cod sursa (job #159396)
Cod sursa(job #159396)
#include<fstream>
#include<math.h>
using namespace std;
int n,m;
int a[100001], r[50][100001], lg[100001];
inline int min(int x, int y){
return x<y?x:y;
}
int main(){
int i, j, st, dr;
ifstream f("rmq.in");
f>>n>>m;
for(i=0;i<n;i++)
f>>a[i];
lg[1]=0;
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=0;i<n-1;i++)
r[0][i]=min(a[i],a[i+1]);
int c=1;
for(j=1;j<=lg[n]+1;j++){
c<<=1;
for(i=0;i<n-c;i++)
r[j][i]=min(r[j-1][i],r[j-1][i+(c>>1)]);
}
ofstream g("rmq.out");
for(i=0;i<m;i++){
f>>st>>dr;
st--;dr--;
g<<min(r[lg[dr-st]][st], r[lg[dr-st]][dr-pow(2,lg[dr-st])])<<'\n';
}
g.close();
f.close();
return 0;
}