Pagini recente » Cod sursa (job #2735066) | Cod sursa (job #256183) | Cod sursa (job #2588643) | Cod sursa (job #241025) | Cod sursa (job #3291395)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[25][100005];
int l, jc=1;
int putm(int x)
{
int p=1, nr=0;
while(x>=p)
p=p*2, nr++;
return nr;
}
void bdkinda()
{
for(int i=0; i<21; i++)
{
for(int j=0; j<100005; j++)
a[i][j]=INT_MAX;
}
}
void genMat(int n)
{
for(int i=1; i<l; i++)
{
for(int j=0; j<n; j++)
{
a[i][j]=min(a[i-1][j], a[i-1][j+jc]);
}
jc*=2;
}
}
int scrieM(int n)
{
for(int i=0; i<l; i++)
{
for(int j=0; j<n; j++)
cout << a[i][j] << " ";
cout << '\n';
}
}
struct interval
{
int start, finish;
};
int query(interval x)
{
int pmin=putm(x.finish-x.start+1)-1;
return min(a[pmin][x.start], a[pmin][x.finish-pmin]);
}
int main()
{
int n, m;
f >> n >> m;
l=putm(n);
bdkinda();
for(int i=0; i<n; i++)
f >> a[0][i];
genMat(n);
scrieM(n);
for(int i=0; i<m; i++)
{
interval x;
f >> x.start >> x.finish;
x.start--;
x.finish--;
g << query(x) << "\n";
}
return 0;
}