Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. #include <cstdio> // scanf e printf
  2. #include <algorithm> // lower_bound
  3. #include <vector> // vector
  4.  
  5. using namespace std; // para uso do C++
  6.  
  7. #define PB push_back // por simplicidade
  8.  
  9. // declaro o vector pilha e o int n
  10. vector<int> pilha;
  11. int n;
  12.  
  13. int main(){
  14.  
  15. // leio o número de elementos da sequência
  16. scanf("%d", &n);
  17.  
  18. // para cada elemento
  19. for(int i=0; i<n; i++){
  20.  
  21. // leio seu valor e guardo em x
  22. int x;
  23. scanf("%d", &x);
  24.  
  25. // declaro um iterador que guardará o elemento mais à esquerda de pilha
  26. // que não é menor que x
  27. vector<int>::iterator it = lower_bound(pilha.begin(), pilha.end(), x);
  28.  
  29. // se it for o fim do vector, então não há elemento que não seja menor que x
  30. // ou seja, todos os topos de pilha são menores ou iguais a x
  31.  
  32. // logo, criamos uma nova pilha e colocamos x no seu topo
  33. if(it==pilha.end()) pilha.PB(x);
  34.  
  35. // porém, se it apontar para alguma posição válida do vector
  36. // colocamos x no topo desta pilha, substintuindo o valor que it aponta por x
  37. else *it = x;
  38. }
  39.  
  40. // no fim, basta imprimir a quantidade de pilhas
  41. printf("%d\n", pilha.size());
  42.  
  43. return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement