Pagini recente » Cod sursa (job #2969998) | Cod sursa (job #1928241) | Cod sursa (job #2699002) | Cod sursa (job #564668) | Cod sursa (job #491259)
Cod sursa(job #491259)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define bit(i) (i & -i)
using namespace std;
#define dim 8192
char ax[dim];
int pz;
inline void cit (int &x)
{
x = 0;
while (ax[pz] < '0' || ax[pz] > '9')
if (++pz == dim)
fread (ax, 1, dim, stdin), pz = 0;
while (ax[pz] >= '0' && ax[pz] <= '9')
{
x = x * 10 + ax[pz] - '0';
if (++pz == dim)
fread (ax, 1, dim, stdin), pz = 0;
}
}
const int N = 100007;
int aib[N];
int a[N];
int n, m;
inline int query (int l, int r)
{
int i;
int ret = 0;
for (i = r; i >= l; )
if (i - bit (i) + 1 >= l)
ret = max (ret, aib[i]),
i -= bit (i);
else
ret = max (ret, a[i--]);
return ret;
}
inline void lazyUpdate (int p)
{
aib[p] = max (a[p], query (p - bit (p) + 1, p - 1));
}
inline void update (int p, int v)
{
a[p] = v;
int i;
for (i = p; i <= n; i += bit (i))
lazyUpdate (i);
//aib[i] = max (a[i], query (i - bit (i) + 1, i - 1));
}
inline void build (int p, int v)
{
a[p] = v;
int i;
lazyUpdate (p);
//aib[p] = max (a[p], query (p - bit (p) + 1, p - 1));
// p += bit (p);
//if (p <= n)
// aib[p] = max (aib[p], a[p]);
}
int main ()
{
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
scanf ("%d %d\n", &n, &m);
//n = 100000;
//m = 100000;
int i;
for (i = 1; i <= n; ++i)
{
//scanf ("%d ", &a[i]);
cit (a[i]);
build (i, a[i]);
//update (i, a[i]);
}
int t, p, q;
while (m--)
{
cit (t); cit (p); cit (q);
//scanf ("%d %d %d\n", &t, &p, &q);
if (t == 0)
printf ("%d\n", query (p, q));
else
build (p, q);
// update (p, q);
}
return 0;
}