Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- int main()
- {
- int n;
- cin>>n;
- vector<int> v (n);
- for (int i=0; i<n; i++)
- cin>>v[i];
- vector<int> DP (n);
- DP[0] = v[0];
- int ini=0, fin=0;
- int m_ini=0, m_fin=0, mayor = v[0];
- for(int i=1; i<n; i++)
- {
- DP[i] = max( DP[i-1]+v[i], v[i] );
- if ( DP[i-1] >= 0 ) ///lo anterior que sirva (como 0), se usa
- fin++;
- else ini=fin=i; /// empiezo de nuevo
- if ( ( DP[i] > mayor ) || ( (DP[i]==mayor) && ( fin-ini > m_fin-m_ini ) ) )/// si mejoro, remplazo
- {
- m_ini = ini; /// para mejorar tengo que... tener un mejor numero
- m_fin = fin; /// y si llegan a ser iguales, me quedo la de mayor tamaño
- }
- mayor = max( DP[i], mayor ); /// guardo el mayoror
- }
- cout<<mayor<<"["<<m_ini<<"-"<<m_fin<<"]";
- return 0;
- }
- /** test case
- 8
- -3 -2 -5 3 -1 -2 2 1
- rta: 3 [3-7]
- 3
- 3 -3 3
- rta: 3 [0-2]
- 5
- 1 2 3 -8 6
- rta: 3 [0-2]
- 5
- 1 2 3 -6 6
- rta: 3 [0-4]
- 11
- 2 -3 -7 -5 2 2 6 -5 -5 3 7
- rta: 3 [4-10] **/
Advertisement
Add Comment
Please, Sign In to add comment