Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. vector<int> secondlargest(vector<int> &a)
  2. {
  3. int n = a.size();
  4. vector<int> idx(n+1);
  5. int pos = -1;
  6. vector<vector<int>> search(n+1);
  7. vector<int> cursearch(n+1);
  8. vector<int> answer(n);
  9. for (int i = 0; i<n; i++)
  10. {
  11. while (pos>=0&&a[idx[pos]]<=a[i])
  12. {
  13. search[i].push_back(idx[pos]);
  14. pos--;
  15. }
  16. idx[pos+1] = i;
  17. if (pos==-1) {answer[i] = -1; pos = 0; continue;}
  18. int c = idx[pos];
  19. while (cursearch[c]<search[c].size()&&a[search[c][cursearch[c]]]<=a[i]) cursearch[c]++;
  20. if (cursearch[c]==search[c].size())
  21. {
  22. if (pos>0) answer[i] = idx[pos-1];
  23. else answer[i] = -1;
  24. pos++;
  25. }
  26. else {answer[i] = search[c][cursearch[c]]; pos++;}
  27. }
  28. return answer;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement