Advertisement
Guest User

Untitled

a guest
Jan 15th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <map>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. typedef vector<int> t_positions;
  10. typedef pair<int, int> t_interval;
  11.  
  12. void solve() {
  13.     int N;
  14.     cin >> N;
  15.    
  16.     vector<int> A(N);
  17.     for (int i = 0; i < N; ++i) {
  18.         cin >> A[i];
  19.     }
  20.    
  21.     map<int, t_positions> key_to_pos;
  22.     for (int i = 0; i < N; ++i) {
  23.         key_to_pos[A[i]].push_back(i);
  24.     }
  25.    
  26.     vector<t_interval> intervals;
  27.     map<t_interval, int> interval_to_count;
  28.     for (map<int, t_positions>::const_iterator it = key_to_pos.begin(); it != key_to_pos.end(); ++it) {
  29.         t_positions pos = it->second;
  30.         sort(pos.begin(), pos.end());
  31.        
  32.         t_interval interval = make_pair(*pos.begin(), *pos.rbegin());
  33.         intervals.push_back(interval);
  34.         interval_to_count[interval] = pos.size();
  35.     }
  36.    
  37.     sort(intervals.begin(), intervals.end());
  38.    
  39.     vector<int> best(intervals.size());
  40.     for (int i = 0; i < intervals.size(); ++i) {
  41.         const t_interval& interval = intervals[i];
  42.        
  43.         best[i] = interval_to_count[interval];
  44.         for (int j = 0; j < i; ++j) {
  45.             if (intervals[j].second < interval.first) {
  46.                 best[i] = max(best[i], best[j] + interval_to_count[interval]);
  47.             }
  48.         }
  49.     }
  50.    
  51.     int result = *max_element(best.begin(), best.end());
  52.     cout << result << endl;
  53. }
  54.  
  55. int main() {
  56.     freopen("input.txt", "r", stdin);
  57.     freopen("output.txt", "w", stdout);
  58.    
  59.     solve();
  60.    
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement