Advertisement
NHumme

Untitled

Apr 9th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. string s;
  7. char minb[200000], maxb[200000];
  8. int nmin[200000], nmax[200000], mind, maxk, n, idx;
  9.  
  10. int main()
  11. {
  12.     cin >> s;
  13.     n = s.size();
  14.     minb[0] = s[0];
  15.     nmin[0] = 0;
  16.     maxb[0] = s[0];
  17.     nmax[0] = 0;
  18.     for (int i = 1; i<n; i++)
  19.     {
  20.         if (s[i] <= minb[i - 1])
  21.         {
  22.             minb[i] = s[i];
  23.             nmin[i] = i;
  24.         }
  25.         else
  26.         {
  27.             minb[i] = minb[i - 1];
  28.             nmin[i] = nmin[i - 1];
  29.         }
  30.         if (s[i] >= maxb[i - 1])
  31.         {
  32.             maxb[i] = s[i];
  33.             nmax[i] = i;
  34.         }
  35.         else
  36.         {
  37.             maxb[i] = maxb[i - 1];
  38.             nmax[i] = nmax[i - 1];
  39.         }
  40.     }
  41.  
  42.     maxk = 0;
  43.     mind = 1000000;
  44.     idx = n - 1;
  45.  
  46.     for (int i = n - 2; i >= 0; i--)
  47.     {
  48.         if (abs(int(s[i] - minb[i])) == maxk && mind>abs(i - nmin[i] + 1) || abs(int(s[i] - minb[i]))>maxk)
  49.         {
  50.             idx = nmin[i];
  51.             mind = abs(i - nmin[i]) + 1;
  52.             maxk = abs(int(s[i] - minb[i]));
  53.         }
  54.         if (abs(int(s[i] - maxb[i])) == maxk && mind>abs(i - nmax[i] + 1) || abs(int(s[i] - maxb[i]))>maxk)
  55.         {
  56.             idx = nmax[i];
  57.             mind = abs(i - nmax[i]) + 1;
  58.             maxk = abs(int(s[i] - maxb[i]));
  59.         }
  60.     }
  61.     cout << s.substr(idx, mind);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement