Pagini recente » viata_periculoasa_pe_infoarena2 | Cod sursa (job #3280553) | Cod sursa (job #2698668) | Cod sursa (job #2904432) | Cod sursa (job #2748690)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
const int MaxN=100001,Log3Max=11;
int v[MaxN],mn[Log3Max][MaxN],pw3[]={1,3,9,27,81,243,729,2187,6561,19683,59049,177147},lg3[MaxN];
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q,x,y,lg;
fin>>n>>q;
for(int i=1;i<=n;i+=1)
fin>>v[i];
for(int i=3;i<=n;i+=1)
lg3[i]=lg3[i/3]+1;
for(int i=1;i<=n;i+=1)
mn[0][i]=v[i];
for(int p=1;p<=Log3Max;p+=1)
for(int i=1;i+pw3[p]-1<=n;i+=1)
mn[p][i]=min({mn[p-1][i],mn[p-1][i+pw3[p-1]],mn[p-1][i+2*pw3[p-1]]});
while(q--) {
fin>>x>>y;
lg=lg3[y-x+1];
if(x+(2*pw3[lg])-1<=y) {
fout<<min({mn[lg][x],mn[lg][x+pw3[lg]],mn[lg][y-pw3[lg]+1]})<<"\n";
} else {
fout<<min(mn[lg][x],mn[lg][y-pw3[lg]+1])<<"\n";
}
}
return 0;
}