Cod sursa(job #1639874)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 8 martie 2016 14:28:53
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#define zeros(x) (x&(x^(x-1)))
#include <algorithm>

using namespace std;

const int NMAX = 100001;
int n,m;
int AIB[NMAX];

void Update(int,int);
void citire()
{
    scanf("%d %d",&n,&m);
    int x;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
       Update(i,x);
    }
}

void Update(int poz,int val)
{
    for(int i=poz;i<=n;i+=zeros(i))
        AIB[i]=max(AIB[i],val);
}

int Query(int a,int b)
{
    int maxx = AIB[b];
    for(int i=b;i>=a;i-=zeros(i))
        maxx = max(maxx,AIB[i]);
    return maxx;
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    citire();
   int q,a,b;
   for(int i=1;i<=m;i++)
    {
        scanf("%d",&q);
        scanf("%d %d",&a,&b);
        if(q==0)
        {
            if(a>b)
                swap(a,b);
            printf("%d\n",Query(a,b));
            continue;
        }
        if(q==1)
        {
            Update(a,b);
            continue;
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}