Clasificado en Trabajos de Otras materias de Universidad.
Escrito el 27 de Mayo de 2010 en
Español y con un tamaño de 9.558 bytes.
#include<iostream>
02usingnamespacestd;
03#include<math.h>
04
05template<classT>
06classSegmentTree
07{
08int*A,size;
09public:
10SegmentTree(intN)
11{
12intx = (int)(ceil(log(N)))+1;
13size = 2*(int)pow(2,x);
14A =newint[size];
15memset(A,-1,sizeof(A));
16}
17voidinitialize(intnode,intstart,
18intend, T *array)
19{
20
21if(start==end)
22A[node] = start;
23else
24{
25intmid = (start+end)/2;
26initialize(2*node,start,mid,array);
27initialize(2*node+1,mid+1,end,array);
28if(array[A[2*node]]<=
29array[A[2*node+1]])
30A[node] = A[2 * node];
31else
32A[node] = A[2 * node + 1];
33}
34}
35intquery(intnode,intstart,
36intend,inti,intj, T *array)
37{
38intid1,id2;
39if(i>end || j<start)
40return-1;
41
42if(start>=i && end<=j)
43returnA[node];
44
45intmid = (start+end)/2;
46id1 = query(2*node,start,mid,i,j,array);
47id2 = query(2*node+1,mid+1,end,i,j,array);
48
49if(id1==-1)
50returnA[node] = id2;
51if(id2==-1)
52returnA[node] = id1;
53
54if(array[id1]<=array[id2])
55returnA[node] = id1;
56else
57returnA[node] = id2;
58}
59};
60
61intmain()
62{
63inti,j,N;
64intA[1000];
65scanf("%d",&N);
66for(i=0;i<N;i++)
67scanf("%d",&A[i]);
68
69SegmentTree<int> s(N);
70s.initialize(1,0,N-1,A);
71while(scanf("%d%d",&i,&j)!=EOF)
72printf("%d\n",A[s.query(1,0,N-1,i-1,j-1,A)]);
| ¿Te ha sido útil este documento? | ||
|---|---|---|
| A 0 personas si les ha sido útil el documento. | 0% | |
| A 0 personas no les ha gustado. | ||
| Tags:ensamblador,int,a[node,return,else,a[2 | |
| Este documento se ha visitado 2 veces y le gusta a 0 personas |
| Imprimir | |
| Karma: 0% |