Cod sursa(job #1874277)

Utilizator enedumitruene dumitru enedumitru Data 9 februarie 2017 20:56:06
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
using namespace std;
ifstream f("arbint.in"); ofstream g("arbint.out");
int AI[1<<19];
void update(int nod, int st, int dr, int a, int b)
{   if(st==dr) {AI[nod]=b; return;}
    int mid=(st+dr)>>1;
    if(a<=mid) update(2*nod,st,mid,a,b); else update(2*nod+1,mid+1,dr,a,b);
    AI[nod]=max(AI[2*nod],AI[2*nod+1]);
}
int query(int nod, int st, int dr,int a, int b)
{   if(a<=st && dr<=b) return AI[nod];
    int mid=(st+dr)>>1,max1=0,max2=0;
    if(a<=mid) max1=query(2*nod,st,mid,a,b);
    if(mid<b) max2=query(2*nod+1,mid+1,dr,a,b);
    return max(max1,max2);
}
int main()
{   int n,m;
    f>>n>>m;
    for(int val,i=1;i<=n;++i) {f>>val; update(1,1,n,i,val);}
    for(int op,a,b,i=0;i<m;i++)
    {   f>>op>>a>>b;
        if(op==0) g<<query(1,1,n,a,b); else update(1,1,n,a,b);
    }
    g.close(); return 0;
}