Pagini recente » Cod sursa (job #613061) | Cod sursa (job #2152327) | Cod sursa (job #1774458) | Cod sursa (job #1940526) | Cod sursa (job #1568988)
#include <fstream>
#include <cmath>
#include <cstring>
#define Bmaxim 100010 * 5
#define DIM 100010
using namespace std;
int maxim(const int &a, const int &b)
{
if (a > b)
return a;
return b;
}
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int p, N, M, a, b, op, buffer, v[DIM], A[320], i, j, st, dr, c, d;
char buf[Bmaxim];
int solution;
int int_st[320];
int int_dr[320];
void gint(int &ans) {
ans = 0;
while (buf[buffer]<'0' || buf[buffer]>'9') {
buffer++;
if (buffer == Bmaxim - 1) {
fin.get(buf, Bmaxim, EOF);
buffer = 0;
}
}
while (buf[buffer] >= '0'&&buf[buffer] <= '9') {
ans = ans * 10 + buf[buffer++] - '0';
if (buffer == Bmaxim - 1) {
fin.get(buf, Bmaxim, EOF);
buffer = 0;
}
}
}
void update()
{
v[a] = b;
for(i = 1; i * p <= N;i ++){
if( int_st[i] <= a && int_dr[i] >= a )
{
A[i] = 0;
for(j = int_st[i]; j <= int_dr[i]; j ++){
A[i] = maxim(A[i],v[j]);
}
break;
}
}
}
void query()
{
c = N + 1; d = 0;
for(i = 1; i <= N / p + 1; i ++)
{
if( a <= int_st[i] && int_dr[i] <= b)
{
solution = maxim(solution, A[i]);
dr = maxim(dr, int_dr[i]);
if(int_st[i] < st)
{
st = int_st[i];
}
}
}
if(c == N + 1 && d == 0)
{
c = d = b;
}
for(i = a; i <= c; i ++)
{
solution = maxim(solution, v[i]);
}
for(i = d; i <= b; i ++)
{
solution = maxim(solution, v[i]);
}
}
int main()
{
fin.get(buf, Bmaxim, EOF);
gint(N);
gint(M);
for(int i = 1; i <= N; i ++)
{
gint(v[i]);
}
p = (int)sqrt(N);
for(i = 1; i * p <= N; i ++)
{
int_st[i] = (i - 1) * p + 1;
int_dr[i] = i * p;
for(j = int_st[i]; j <= int_dr[i]; j ++)
{
A[i] = maxim(A[i], v[j]);
}
}
while(M --)
{
gint(op);
if(op)
{
gint(a), gint(b);
update();
}
else
{
gint(a), gint(b);
solution = 0;
query();
fout << solution << '\n';
}
}
return 0;
}