Advertisement
paranid5

п**зда

Jun 19th, 2020
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <deque>
  4. #include <stack>
  5. #include <algorithm>
  6.  
  7. int main()
  8. {
  9.     unsigned n = 0;
  10.     std::scanf("%u", &n);
  11.     std::deque<unsigned> pn(n, 0);
  12.     for (unsigned& i : pn) scanf("%u", &i);
  13.     std::vector<unsigned> sorts(n, 0);
  14.     std::copy(pn.begin(), pn.end(), sorts.begin());
  15.     std::sort(sorts.begin(), sorts.end());
  16.     std::stack<unsigned> keep;
  17.     std::vector<std::pair<unsigned, unsigned>> ans;
  18.     for (unsigned i = 0; i < n; i++)
  19.     {
  20.         unsigned count = 0;
  21.         if (!keep.empty() && keep.top() == sorts[i]) goto FIND;
  22.         while (!pn.empty() && sorts[i] != pn[0])
  23.         {
  24.             keep.push(pn[0]);
  25.             pn.pop_front();
  26.             count++;
  27.         }
  28.         if (!pn.empty()) // т.е. мы нашли наименьший в pn
  29.         {
  30.             pn.pop_front(); // больше он не нужен
  31.             count++;
  32.             std::pair<unsigned, unsigned> f(1, count);
  33.             std::pair<unsigned, unsigned> s(2, 1);
  34.             ans.push_back(f);
  35.             ans.push_back(s);
  36.         }
  37.         else // pn пуст, значит pair(1,n) больше не будет
  38.         {
  39.             if (keep.top() != sorts[i])
  40.             {
  41.                 std::puts("0");
  42.                 goto END; // лень юзать bool, так быстрее во всех смыслах
  43.             }
  44.             else
  45.             {
  46.             FIND:
  47.                 keep.pop(); // т.е. мы нашли наименьший в keep
  48.                 ans[ans.size() - 1].second++;
  49.             }
  50.         }
  51.     }
  52.     for (const std::pair<unsigned, unsigned> an : ans)
  53.         std::printf("%u %u\n", an.first, an.second);
  54. END:return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement