Ensamblador

Clasificado en Trabajos de Otras materias de Universidad.

Escrito el 27 de Mayo de 2010 en esEspañol y con un tamaño de 9.558 bytes.

 
#include<iostream>
02using namespace std;
03#include<math.h>
04 
05template<class T>
06class SegmentTree
07{
08int *A,size;
09public:
10SegmentTree(int N)
11{
12int x = (int)(ceil(log(N)))+1;
13size = 2*(int)pow(2,x);
14A = new int[size];
15memset(A,-1,sizeof(A));
16}
17void initialize(int node, int start,
18int end, T *array)
19{
20 
21if (start==end)
22A[node] = start;
23else
24{
25int mid = (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}
35int query(int node, int start,
36int end, int i, int j, T *array)
37{
38int id1,id2;
39if (i>end || j<start)
40return -1;
41 
42if (start>=i && end<=j)
43return A[node];
44 
45int mid = (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)
50return A[node] = id2;
51if (id2==-1)
52return A[node] = id1;
53 
54if (array[id1]<=array[id2])
55return A[node] = id1;
56else
57return A[node] = id2;
58}
59};
60 
61int main()
62{
63int i,j,N;
64int A[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)]);
Tags:ensamblador,int,a[node,return,else,a[2
Este documento se ha visitado 2 veces y le gusta a 0 personas
© Wikiteka, 2010
Chuletas  |  Apuntes