Pagini recente » Cod sursa (job #2024929) | Cod sursa (job #426966) | Cod sursa (job #103057) | Cod sursa (job #2041029) | Cod sursa (job #159397)
Cod sursa(job #159397)
#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]][(int)(dr-pow(2,lg[dr-st]))])<<'\n';
}
g.close();
f.close();
return 0;
}