Pagini recente » Cod sursa (job #1653527) | Cod sursa (job #1128715) | Cod sursa (job #3004479) | Cod sursa (job #1198825) | Cod sursa (job #981067)
Cod sursa(job #981067)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,v[100010],p[100010];
int a[20][100010];
int main(void){
register int i,j,x,y;
f>>n>>m;
p[1]=0;
f>>v[1];
for(i=2;i<=n;i++){
f>>v[i];
p[i]=1+p[i/2];
}
for(i=1;i<=n;i++)
a[0][i]=v[i];
for(j=1;(1<<j)<=n;j++){
for(i=1;i<=n;i++){
a[j][i]=a[j-1][i];
if((1<<(j-1))+i<=n && a[j-1][(1<<(j-1))+i]<=a[j][i])
a[j][i]=a[j-1][(1<<(j-1))+i];
}
}
for(;m>0;m--){
f>>x>>y;
j=p[y-x+1];
g<<(a[j][x]<a[j][y-(1<<j)+1]?a[j][x]:a[j][y-(1<<j)+1])<<"\n";
}
f.close();
g.close();
return 0;
}