Pagini recente » Cod sursa (job #1680707) | Cod sursa (job #3040445) | Cod sursa (job #288799) | Cod sursa (job #2105880) | Cod sursa (job #3245066)
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
#define pi pair<int, int>
#define ff first
#define ss second
using namespace std;
const string file = "arbint";
ifstream fin(file+".in");
ofstream fout(file+".out");
const int dim = 1e5+1;
int i, n, m, a[2*dim], rez[4*dim];
void update(int nod)
{
while (nod != 0)
{
rez[nod] = max(rez[nod*2], rez[nod*2+1]);
nod /= 2;
}
}
int query(int nod, int st, int dr, int qst, int qdr)
{
if (qst <= st && dr <= qdr)
return rez[nod];
int mij = (st+dr)/2, mx = 0;
if (qst <= mij)
mx = query(nod*2, st, mij, qst, qdr);
if (mij+1 <= qdr)
mx = max(mx, query(nod*2+1, mij+1, dr, qst, qdr));
return mx;
}
int main()
{
fin >> n >> m;
for (i = 1; i <= n; i++)
fin >> a[i];
int p = 0;
while ((1<<p) < n)
p++;
n = (1<<p);
for (i = 1; i <= n; i++)
{
rez[i+n-1] = a[i];
update((i+n-1)/2);
}
int tip, st, dr;
while (m--)
{
fin >> tip >> st >> dr;
//cout << "tip, st, dr = " << tip << ' ' << st << ' ' << dr << endl;
if (tip == 1)
{
rez[st+n-1] = dr;
update((st+n-1)/2);
}
else
fout << query(1, 1, n, st, dr) << '\n';
}
return 0;
}