Pagini recente » Cod sursa (job #1252720) | Cod sursa (job #1265968) | Cod sursa (job #355197) | Cod sursa (job #1641869) | Cod sursa (job #772518)
Cod sursa(job #772518)
#include <fstream>
using namespace std;
int N, M, lol, a, b, val;
int v[100005];
int aint[271073];
char pars[100];
ifstream fin ("arbint.in");
void Actualizare (int nod, int st, int dr)
{
if (dr == st)
{
aint[nod] = b;
return;
}
int mij = (st + dr) >> 1;
if (a <= mij) Actualizare (nod << 1, st, mij);
else Actualizare ((nod << 1) + 1, mij + 1, dr);
aint[nod] = max (aint[nod << 1], aint[(nod << 1) + 1]);
}
int Interogare (int nod, int st, int dr)
{
if (a <= st && b >= dr) return aint[nod];
int mij = (st + dr) >> 1, S = 0;
if (a <= mij) S = Interogare (nod << 1, st, mij);
if (b > mij) S = max (S, Interogare ((nod << 1) + 1, mij + 1, dr));
return S;
}
void Citire () {
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
fin >> v[i];
b = v[i];
a = i;
Actualizare (1, 1, N);
}
fin.getline (pars, 90);
}
void Business () {
ofstream fout ("arbint.out");
for (int i = 0; i < M; i++)
{
fin.getline (pars, 90);
val = pars[0] - '0';
a = 0;
b = 0;
for (lol = 2; pars[lol] >= '0' && pars[lol] <= '9'; lol++)
a = a * 10 + pars[lol] - '0';
lol++;
for (; pars[lol] >= '0' && pars[lol] <= '9'; lol++)
b = b * 10 + pars[lol] - '0';
//fin >> val >> a >> b;
if (val) Actualizare (1, 1, N);
else fout << Interogare (1, 1, N) << "\n";
}
fin.close ();
fout.close ();
}
int main () {
Citire ();
Business ();
return 0;
}