Advertisement
Gustavo_Inzunza

Hiding Sequences

May 31st, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <string>
  5. #include <algorithm>
  6. using namespace std;
  7. vector<int> arreglo(1000001),arbol(2000002);
  8. void constructor(int nodo,int izq,int der)
  9. {
  10.     if(izq==der)
  11.     {
  12.         arbol[nodo]=arreglo[izq];
  13.         return;
  14.     }
  15.     int mitad=(izq+der)/2;
  16.     constructor(2*nodo,izq,mitad);
  17.     constructor(2*nodo+1,mitad+1,der);
  18.     arbol[nodo]=arbol[2*nodo]+arbol[2*nodo+1];
  19. }
  20. int consulta(int nodo,int izq, int der,int start,int end)
  21. {
  22.     if(end<izq || start>der)//caso fuera de intervalo
  23.         return 0;
  24.     if(izq>=start && der<=end)//caso dentro del intervalo
  25.         return arbol[nodo];
  26.     //cout<<"paso"<<endl;
  27.     //int respuesta_izq=consulta(2*nodo,izq,(izq+der)/2,start,end);
  28.     //int respuesta_der=consulta(2*nodo+1,(izq+der)/2+1,der,start,end);
  29.     return consulta(2*nodo,izq,(izq+der)/2,start,end)+consulta(2*nodo+1,(izq+der)/2+1,der,start,end);
  30. }
  31. void update(int nodo,int izq,int der,int pos)
  32. {
  33.     if(pos<izq || pos>der)
  34.         return;
  35.     if(izq==der)
  36.         return;
  37.     int mitad=(izq+der)/2;
  38.     update(2*nodo,izq,mitad,pos);
  39.     update(2*nodo+1,mitad+1,der,pos);
  40.     if(arreglo[arbol[2*nodo]]<=arreglo[arbol[2*nodo+1]])
  41.         arbol[nodo]=arbol[2*nodo];
  42.     else
  43.         arbol[nodo]=arbol[2*nodo+1];
  44. }
  45. int main(int argc, char const *argv[])
  46. {
  47.     int N;
  48.     scanf("%d",&N);
  49.     for (int i = 0; i < N; ++i)
  50.     {
  51.         scanf("%d",&arreglo[i]);
  52.         //cout<<arreglo[i]<<endl;
  53.     }
  54.     constructor(1,0,N-1);
  55.     long long int contador=0;
  56.     for (int i = 0; i < N-1; ++i)
  57.     {
  58.         for (int j = i+1; j < N; ++j)
  59.         {
  60.             //cout<<"i:"<<i<<" j:"<<j<<endl;
  61.             //cout<<consulta(1,0,N-1,i,j)<<endl;
  62.             if(consulta(1,0,N-1,i,j)==0)
  63.                 contador++;
  64.         }
  65.     }
  66.     printf("%Ld\n", contador);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement