Pagini recente » Cod sursa (job #483066) | Cod sursa (job #2702583) | Cod sursa (job #2810330) | Cod sursa (job #571862) | Cod sursa (job #1912820)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int oo = 200000000;
int n, m, a,b;
int v[100010], rmq[1500], key, crmin, keya, keyb;
int main()
{
fin >> n >> m;
key = 1;
while(key*key <= n) key++;
for(int i=0; i<1400; i++)
rmq[i] = oo;
for(int i=0; i<n; i++)
{
fin>>v[i];
rmq[v[i]/key] = min(rmq[v[i]/key], v[i]);
}
while(m--)
{
fin >> a >> b;
a--; b--;
crmin = oo;
if(a/key == b/key)
{
//fout<<"a/key == b/key: ";
while(a!=b)
{
//fout<<'\n'<<"a: "<<a<<"->"<<v[a]<<'\n';
crmin = min(crmin, v[a]);
a++;
}
}
else
{
//fout<<"a/key != b/key: ";
keya = a/key; keyb = b/key;
while(a/key == keya)
{
//fout<<'\n'<<"a: "<<a<<"->"<<v[a]<<'\n';
crmin = min(crmin, v[a]);
a++;
}
while(b/key == keyb)
{
//fout<<'\n'<<"b: "<<b<<"->"<<v[b]<<'\n';
crmin = min(crmin, v[b]);
b--;
}
keya++; keyb--;
//if(keya <= keyb) fout<<"inter Key: ";
while(keya <= keyb)
{
//fout<<'\n'<<"key: "<<keya<<"->"<<rmq[keya]<<'\n';
crmin = min(crmin, rmq[keya]);
keya++;
}
}
fout<<crmin<<'\n';
}
return 0;
}