Pagini recente » Cod sursa (job #638949) | Cod sursa (job #2817079) | Cod sursa (job #2362514) | Cod sursa (job #2854307) | Cod sursa (job #1264743)
// Se da un vector si doi indici
// Sa se determine pozitia elementului minim situat intre cei doi indici.
// Rezolvare cu arbore de intervale, 70 p [infoarena]
#include <fstream>
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int n, i, a[100001], m[1500][1500], s, d, q;
void dina () {
int l, c;
for (l = 1; l <= n; l++)
m[l][l] = l;
for (l = 1; l <= n; l++)
for (c = l + 1; c <= n; c++)
if (a[m[l][c - 1]] < a[c])
m[l][c] = m[l][c - 1];
else
m[l][c] = c;
}
int main() {
fi >> n >> q;
for (i = 1; i <= n; i++)
fi >> a[i];
dina ();
for (i = 1; i <= q; i++) {
fi >> s >> d;
fo << a[m[s][d]] << '\n';
}
return 0;
}
/*
Cazurile posibile in cerere:
( ) [ ] caz 1
s d b e
( [ ) ] caz 3
s b d e
( [ ] ) caz 2
s b e d
[ ()] caz 3
b sde
[ ( ] ) caz 3
b s e d
[ ] () caz 1
b e sd
*/