GastonFontenla

Untitled

Jul 3rd, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. struct Grafo
  7. {
  8.     vector <vector <int> > adj;
  9.     vector <vector <int> > radj;
  10.  
  11.  
  12.     vector <long long> altura;
  13.  
  14.     void armar(vector <int> v)
  15.     {
  16.         adj.resize(v.size());
  17.         radj.resize(v.size());
  18.  
  19.         altura = vector <long long> (v.size(), 0);
  20.         for(int i=0; i<v.size()-1; i++)
  21.         {
  22.             if(v[i] > v[i+1])
  23.             {
  24.                 adj[i].push_back(i+1);
  25.                 radj[i+1].push_back(i);
  26.             }
  27.             else if(v[i] < v[i+1])
  28.             {
  29.                 adj[i+1].push_back(i);
  30.                 radj[i].push_back(i+1);
  31.             }
  32.         }
  33.     }
  34.  
  35.     void DFS(int n)
  36.     {
  37.         for(int i=0; i<radj[n].size(); i++)
  38.         {
  39.             altura[radj[n][i]] = max(altura[radj[n][i]], altura[n]+1);
  40.             DFS(radj[n][i]);
  41.         }
  42.     }
  43.  
  44.     long long respuesta()
  45.     {
  46.         for(int i=0; i<adj.size(); i++)
  47.         {
  48.             if(adj[i].size() == 0)
  49.             {
  50.                 altura[i] = 1;
  51.                 DFS(i);
  52.             }
  53.         }
  54.  
  55.         long long res = 0;
  56.  
  57.         for(int i=0; i<altura.size(); i++)
  58.             res += altura[i];
  59.  
  60.         return res;
  61.     }
  62.  
  63. };
  64.  
  65. int main()
  66. {
  67.     int n;
  68.     cin >> n;
  69.     vector <int> v(n);
  70.  
  71.     for(int i=0; i<n; i++)
  72.         cin >> v[i];
  73.  
  74.     Grafo g;
  75.     g.armar(v);
  76.  
  77.     cout << g.respuesta() << endl;
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment