sacgajcvs

Untitled

Sep 4th, 2022
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int fun(vector<int>& v, int k) {
  5. int n = v.size();
  6. set<int> st, st1;
  7. int ans = 0, cur = 0;
  8. auto add = [&] (int val) {
  9. if(st.size() == 0) {
  10. st.insert(val);
  11. st1.insert(-val);
  12. return;
  13. }
  14. auto it1 = st.upper_bound(val);
  15. auto it2 = st1.upper_bound(-val);
  16. if(it1 != st.end() && it2 != st1.end()) {
  17. cur -= (((*it1) + (*it2) > 1) ? 1 : 0);
  18. }
  19. if(it1 != st.end()) {
  20. cur += (((*it1) - val > 1) ? 1 : 0);
  21. }
  22. if(it2 != st1.end()) {
  23. cur += ((val + (*it2) > 1) ? 1 : 0);
  24. }
  25. // cout << "add = " << val << " " << (it1 != st.end() ? (*it1) : 756) << " " << (it2 != st1.end() ? *it2 : 756) << " " << cur << endl;
  26. st.insert(val);
  27. st1.insert(-val);
  28. return;
  29. };
  30.  
  31. auto rem = [&] (int val) {
  32. if(st.size() == 1) {
  33. st.erase(val);
  34. st1.erase(-val);
  35. return;
  36. }
  37. auto it1 = st.upper_bound(val);
  38. auto it2 = st1.upper_bound(-val);
  39. if(it1 != st.end() && it2 != st1.end()) {
  40. cur += (((*it1) + (*it2) > 1) ? 1 : 0);
  41. }
  42. if(it1 != st.end()) {
  43. cur -= (((*it1) - val > 1) ? 1 : 0);
  44. }
  45. if(it2 != st1.end()) {
  46. cur -= ((val + (*it2) > 1) ? 1 : 0);
  47. }
  48. // cout << "rem = " << val << " " << (it1 != st.end() ? (*it1) : 756) << " " << (it2 != st1.end() ? *it2 : 756) <<" " << cur << endl;
  49. st.erase(val);
  50. st1.erase(-val);
  51. };
  52.  
  53. for(int i = 0; i < n; i++) {
  54. add(v[i]);
  55. // cout << "k = " << k << " i = " << i << " cur = " << cur << endl;
  56. // for(auto i : st) {
  57. // cout << i << " ";
  58. // }
  59. // cout << endl;
  60. if(i >= k - 1) {
  61. ans += cur;
  62. rem(v[i - k + 1]);
  63. }
  64. }
  65. // cout << "k = " << k << " ans = " << ans << endl;
  66. return ans;
  67. }
  68.  
  69. int main()
  70. {
  71. int n;
  72. cin >> n;
  73. vector<int> v(n);
  74. for(int i = 0; i < n; i++) {
  75. cin >> v[i];
  76. }
  77. int ans = 0;
  78. for(int i = 2; i <= n; i++) {
  79. ans += fun(v, i);
  80. }
  81. cout << ans << endl;
  82. return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment