Advertisement
Korotkodul

cf 1

Jun 14th, 2022 (edited)
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 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); for (int &i: a) cin>>i;
  52.     set <int> s;
  53.     s.insert(a[0]);
  54.     vector <int> pf;
  55.     int fr; //не убыв from НЕ ВКЛЮЧАЯ
  56.     for (int i = n - 2; i >= 0; --i){
  57.         if (a[i] > a[i+1]){
  58.             fr = i;
  59.             break;
  60.         }
  61.     }
  62.     //для каждого элеменат - индекс первого вхождения с конца, т е последнего вхождения в вектор
  63.     map <int, int> lst;
  64.     for (int i = 0; i < n; ++i){
  65.         lst[a[i]] = -1;
  66.     }
  67.     for (int i = n - 1; i >= 0; --i){
  68.         lst[a[i]] = max(lst[a[i]], i);
  69.     }
  70.     /*сдвигаем границу в право
  71.     ищем id, наиболее приближенный к началу, такой что справа (НЕ ВКЛЮЧАЯ) от этого индекса нет ни одногоэлемента, к-рый был бы слева
  72.     */
  73.     int to = lst[a[0]], gdid=-1;
  74.     for (int i = 0; i <= to && i < n; ++i){
  75.         to = max(to, lst[a[i]]);
  76.         if (i == to){
  77.             gdid = to;
  78.             break;
  79.         }
  80.     }
  81.    
  82.     //проверить, что справа от этого не убывает!
  83.     gdid = max(gdid, fr);
  84.     set <int> s(a.begin(), a.begin() + gdid);
  85.    
  86.     cout<<s.size()<<"\n";
  87. }
  88.  
  89. int main()
  90. {
  91.     ios::sync_with_stdio(0);
  92.     cin.tie(0);
  93.     cout.tie(0);
  94.     int t; cin>>t;
  95.     for (int go = 0; go  < t; ++go){
  96.         int n; cin>>n;
  97.         slv(n);
  98.     }
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement