Cod sursa(job #990736)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 28 august 2013 23:27:44
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
using namespace std;
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<cmath>
//ifstream eu("arbint.in");
ofstream tu("arbint.out");
#define Nmax 100002
#define DIM 8192
char ax[DIM+16];
int pz;
int IT[4*Nmax];
int N,M,poz,val,QL,QR,QMax;
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;
    }
}
inline void Update(int nod,int L,int R)
{
    int Mid=(L+R)/2;
    if(L==R)
    {
        IT[nod]=val;
        return;
    }
    if(poz<=Mid)
        Update(2*nod,L,Mid);
    else
        Update(2*nod+1,Mid+1,R);
    IT[nod]=max(IT[2*nod],IT[2*nod+1]);
}

inline void Query(int nod,int L,int R)
{
    int Mid=(L+R)/2;
    if(QL<=L&&R<=QR)
        {
        QMax=max(QMax,IT[nod]);
        return;
        }
    if(QL<=Mid)
        Query(2*nod,L,Mid);
    if(QR>Mid)
        Query(2*nod+1,Mid+1,R);
}

 int main()
 {
    int op;
   freopen("arbint.in","r",stdin);
    //eu>>N>>M;
    cit(N);cit(M);
    for(poz=1;poz<=N;poz++)
    {
        //eu>>val;
        cit(val);
        Update(1,1,N);
    }
    while(M--)
    {
        //eu>>op;
        cit(op);
        if(op==0)
        {
            QMax=0;
          //  eu>>QL>>QR;
            cit(QL);cit(QR);
           // Query(1,1,N);
            tu<<QMax<<"\n";
        }
        if(op==1)
        {
            //eu>>poz>>val;
            cit(poz);cit(val);
            //Update(1,1,N);
        }
    }
    return 0;
 }