Pagini recente » Cod sursa (job #1744847) | Cod sursa (job #2813931) | Cod sursa (job #1997942) | Cod sursa (job #1321170) | Cod sursa (job #1166449)
#include <fstream>
using namespace std;
const char InFile[] = "arbint.in";
const char OutFile[] = "arbint.out";
const int MaxN = 100111;
const int AINT_SIZE = MaxN*4;
ifstream fin(InFile);
ofstream fout(OutFile);
int N, M, op, query_ans, query_left, query_right, update_pos, update_val, V[MaxN], AINT[AINT_SIZE];
void Init(int nod, int st, int dr)
{
if (st == dr)
{
AINT[nod] = V[st];
return;
}
int mid = (st + dr) >> 1;
int left = nod << 1;
int right = left + 1;
Init(left, st, mid);
Init(right, mid + 1, dr);
if (AINT[left] > AINT[right])
{
AINT[nod] = AINT[left];
}
else
{
AINT[nod] = AINT[right];
}
}
void Update(int nod, int st, int dr)
{
if (st == dr)
{
AINT[nod] = update_val;
return;
}
int mid = (st + dr) >> 1;
int left = nod << 1;
int right = left + 1;
if (update_pos <= mid)
{
Update(left,st,mid);
}
else
{
Update(right,mid+1,dr);
}
if (AINT[left] > AINT[right])
{
AINT[nod] = AINT[left];
}
else
{
AINT[nod] = AINT[right];
}
}
void Query(int nod, int st, int dr)
{
if (query_left <= st && dr <= query_right)
{
if (query_ans < AINT[nod])
{
query_ans = AINT[nod];
}
return;
}
int mid = (st + dr) >> 1;
int left = nod << 1;
int right = left+1;
if (query_left <= mid)
{
Query(left,st,mid);
}
if (mid < query_right)
{
Query(right,mid+1,dr);
}
}
int main()
{
fin >> N >> M;
for (register int i = 1; i <= N; ++i)
{
fin >> V[i];
}
Init(1,1,N);
for (register int i = 1; i <= M; ++i)
{
fin >> op;
if (op == 0)
{
fin >> query_left >> query_right;
query_ans = 0;
Query(1,1,N);
fout << query_ans << "\n";
}
if (op == 1)
{
fin >> update_pos >> update_val;
Update(1,1,N);
}
}
fin.close();
fout.close();
return 0;
}