Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct Grafo
- {
- vector <vector <int> > adj;
- vector <vector <int> > radj;
- vector <long long> altura;
- void armar(vector <int> v)
- {
- adj.resize(v.size());
- radj.resize(v.size());
- altura = vector <long long> (v.size(), 0);
- for(int i=0; i<v.size()-1; i++)
- {
- if(v[i] > v[i+1])
- {
- adj[i].push_back(i+1);
- radj[i+1].push_back(i);
- }
- else if(v[i] < v[i+1])
- {
- adj[i+1].push_back(i);
- radj[i].push_back(i+1);
- }
- }
- }
- void DFS(int n)
- {
- for(int i=0; i<radj[n].size(); i++)
- {
- altura[radj[n][i]] = max(altura[radj[n][i]], altura[n]+1);
- DFS(radj[n][i]);
- }
- }
- long long respuesta()
- {
- for(int i=0; i<adj.size(); i++)
- {
- if(adj[i].size() == 0)
- {
- altura[i] = 1;
- DFS(i);
- }
- }
- long long res = 0;
- for(int i=0; i<altura.size(); i++)
- res += altura[i];
- return res;
- }
- };
- int main()
- {
- int n;
- cin >> n;
- vector <int> v(n);
- for(int i=0; i<n; i++)
- cin >> v[i];
- Grafo g;
- g.armar(v);
- cout << g.respuesta() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment