Cod sursa(job #663505)

Utilizator cristicecCristian Uricec cristicec Data 18 ianuarie 2012 16:41:39
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 #include<stdio.h>\par
#include<vector>\par
#define NMAX 200004\par
\par
using namespace std;\par
int n,m,arb[2*NMAX],v[NMAX];\par
int maxim;\par
int poz;\par
inline int max( int a, int b)\{\par
\tab if(a>b) return a;\par
\tab return b;\par
\}\par
\par
int add(int nod, int st, int dr)\{\par
\tab if(st==dr)\{\par
\tab\tab arb[nod]=v[poz];\par
    \}\par
\tab else\{\par
\tab\tab int mij=(st+dr)/2;\par
\tab\tab if(poz<=mij)\par
\tab\tab\tab add(2*nod, st, mij);\par
\tab\tab else\par
\tab\tab\tab add(2*nod+1,mij+1, dr);\par
\tab\tab\par
\tab\tab arb[nod]=max(arb[2*nod], arb[2*nod+1]);\par
\tab\}\par
\}\par
\par
void max(int nod, int st, int dr, int x, int y)\{\par
\tab if(x<=st&&y>=dr)\par
\tab\tab maxim=max(maxim, arb[nod]);\par
\tab else\{\par
\tab\tab int mij=(st+dr)/2;\par
\tab\tab if(y>mij)\par
\tab\tab\tab max(2*nod+1, mij+1, dr, x , y);\par
\tab\tab if(x<=mij)\par
\tab\tab\tab max(2*nod, st, mij, x, y );\par
\tab\par
\tab\}\par
\}\par
int main()\{\par
\tab freopen("arbint.in","r",stdin);\par
\tab freopen("arbint.out","w",stdout);\par
\tab scanf("%d%d", &n,&m);\par
\tab for(int i=1;i<=n;i++)\{\par
\tab\tab scanf("%d", &v[i]);\par
\tab\tab poz=i;\par
\tab\tab add(1,1,n);\par
\tab\}\tab\par
return 0;\par
\par
\tab int op,a,b;\par
\tab for(int i=1;i<=m;i++)\{\par
\tab\tab scanf("%d%d%d", &op,&a,&b);\par
\tab\tab if(op==0)\{\par
\tab\tab\tab maxim=-1;\par
\tab\tab\tab //max(1,1,n,a,b);\par
\tab\tab     printf("%d\\n", maxim);\par
\tab\tab\}\par
\tab\tab else\par
\tab\tab\{\par
\tab\tab v[a]=b;\par
\tab\tab poz=a;\par
\tab\tab add(1,1,n);\par
\tab\tab\}\par
\tab\}\par
return 0;\par
\}\par
\par
\tab\tab\par
\tab\tab\par
}