Advertisement
Korotkodul

CF div2 13.02 C

Aug 13th, 2022
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50. void slv(int n){
  51.     vector <int> a(n);
  52.     for (int &i: a) cin>>i;
  53.     int fr; //не убыв from НЕ ВКЛЮЧАЯ
  54.     for (int i = n - 2; i >= 0; --i){
  55.         if (a[i] > a[i+1]){
  56.             fr = i;
  57.             break;
  58.         }
  59.     }
  60.  
  61.     //для каждого элеменат - индекс первого вхождения с конца, т е последнего вхождения в вектор
  62.     map <int, int> lst;
  63.     for (int i = 0; i < n; ++i){
  64.         lst[a[i]] = -1;
  65.     }
  66.     for (int i = n - 1; i >= 0; --i){
  67.         lst[a[i]] = max(lst[a[i]], i);
  68.     }
  69.     /*сдвигаем границу в право
  70.     ищем id, наиболее приближенный к началу, такой что справа (НЕ ВКЛЮЧАЯ) от этого индекса нет ни одногоэлемента, к-рый был бы слева
  71.     */
  72.     int to = lst[a[0]], gdid=n-1;
  73.     for (int i = 0; i < n && i <= to ; ++i){
  74.         to = max(to, lst[a[i]]);
  75.         if (i == to && i >= fr){
  76.             gdid = to;
  77.             break;
  78.         }
  79.     }
  80.     set <int> s(a.begin(), a.begin() + gdid);
  81.  
  82.     cout<<s.size()<<"\n";
  83. }
  84.  
  85. int main()
  86. {
  87.     ios::sync_with_stdio(0);
  88.     cin.tie(0);
  89.     cout.tie(0);
  90.     int t; cin>>t;
  91.     for (int go = 0; go  < t; ++go){
  92.         int n; cin>>n;
  93.         slv(n);
  94.     }
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement