Pagini recente » Cod sursa (job #2570022) | Cod sursa (job #2733173) | Cod sursa (job #2900260) | Cod sursa (job #1018962) | Cod sursa (job #2693356)
#include <iostream>
#include<fstream>
#include<math.h>
#include<algorithm>
struct ura {
int st, dr, buc, ind;
} a[100001];
int v[100001], r[100001];
bool cmp(ura w, ura z) {
if(w.buc>z.buc) {
return false;
}
if(w.buc==z.buc) {
if(w.dr>z.dr) {
return false;
}
}
return true;
}
using namespace std;
int main() {
int n, q, i, k, x, y, dro, drp, max, mini, b, maxa, mina, minou, minim;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>q;
k=n/((int)sqrt(q));
for(i=1; i<=n; i++) {
fin>>v[i];
}
for(i=1; i<=q; i++) {
fin>>a[i].st>>a[i].dr;
a[i].buc=a[i].st/k+1;
a[i].ind=i;
}
sort(a+1,a+q+1, cmp);
i=1;
while(i<=q) {
b=a[i].buc;
dro=a[i].dr;
int stg=1;
minou=1000000000;
while(b==a[i].buc) {
drp=a[i].dr;
if(dro==drp && stg==1) {
stg=0;
for(y=b*k; y<=drp; y++) {
if(minou>v[y]) {
minou=v[y];
}
}
}
else {
if(dro>=b*k && drp>=b*k) {
for(y=dro+1; y<=drp; y++) {
if(minou>v[y]) {
minou=v[y];
}
}
}
else {
for(y=b*k; y<=drp; y++) {
if(minou>v[y]) {
minou=v[y];
}
}
}
}
minim=minou;
int lol=min(b*k-1, a[i].dr);
for(x=a[i].st; x<=lol; x++) {
if(minou>v[x]) {
minou=v[x];
}
}
r[a[i].ind]=minou;
minou=minim;
dro=drp;
i++;
}
i--;
i++;
}
for(i=1;i<=q;i++) {
fout<<r[i]<<"\n";
}
return 0;
}