Pagini recente » Cod sursa (job #754282) | Cod sursa (job #2280921) | Cod sursa (job #1352042) | Cod sursa (job #291592) | Cod sursa (job #579635)
Cod sursa(job #579635)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
#define pb push_back
#define sz size()
#define SORT(x) sort(x.begin(), x.end())
#define REVERSE(x) reverse(x.begin(), x.end())
#define REP(x, hi) for (int x=0; x<(hi); x++)
#define FOR(x, lo, hi) for (int x=(lo); x<(hi); x++)
#define FORALL(it,x) for (typeof(x.begin()) it=x.begin(); it!=x.end(); it++)
#define INFILE "arbint.in"
#define OUTFILE "arbint.out"
ifstream fin (INFILE);
ofstream fout (OUTFILE);
#define VMAX 270000
int v[VMAX];
int pos, nr, a, b;
void add(int idx, int st, int dr)
{
if( st==dr ) v[idx] = nr;
else
{
int mij = (st+dr)/2;
if( pos<=mij ) add( (idx+1)*2-1, st, mij);
else add( (idx+1)*2, mij+1, dr);
v[idx] = max(v[(idx+1)*2-1], v[(idx+1)*2]);
}
}
int getmax(int idx, int st, int dr)
{
if(a<=st && dr<=b ) return v[idx];
else
{
int mij = (st+dr)/2;
if( b<=mij ) return getmax( (idx+1)*2-1, st, mij);
else if( a>mij ) return getmax( (idx+1)*2, mij+1, dr);
else return max( getmax( (idx+1)*2-1, st, mij),
getmax( (idx+1)*2, mij+1, dr));
}
}
int main()
{
memset(v, 0, sizeof(v));
int ops, op, n;
fin >> n >> ops;
REP(i, n)
{
fin >> nr;
pos = i;
add(0, 0, n-1);
}
REP(i, ops)
{
fin >> op >> a >> b;
switch(op) {
case 0:
a--;
b--;
fout << getmax(0, 0, n-1) << endl;
break;
default:
pos = a-1;
nr = b;
add(0, 0, n-1);
}
}
return 0;
}