Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. int arr[3000001] = {};
  5.  
  6.  
  7.  
  8.  
  9.  
  10. int main()
  11. {
  12. cin.sync_with_stdio(0);
  13. cin.tie(0);
  14.  
  15. deque<pair<int,int> >increasing;
  16.  
  17. deque<pair<int,int> >decreasing;
  18.  
  19.  
  20. int n,k;
  21. cin >> n >> k;
  22.  
  23. for (int i=0;i<n;i++){
  24. cin >> arr[i];
  25. }
  26.  
  27.  
  28. int l =0,r=0;
  29. increasing.push_back({arr[0],0} );
  30. decreasing.push_back( {arr[0],0} );
  31.  
  32. long long int ans=0;
  33.  
  34. while (r < n){
  35. // cout << l << " " << r << " " << increasing[0].first << " " << decreasing[0].first << endl;
  36.  
  37. while (increasing.size() > 0 && increasing[0].second < l ){
  38. increasing.pop_front();
  39. }
  40. while (decreasing.size() > 0 && decreasing[0].second < l ){
  41. decreasing.pop_front();
  42. }
  43.  
  44.  
  45.  
  46.  
  47. if (increasing.front().first - decreasing.front().first <=k){
  48.  
  49. ans += r-l+1;
  50. r++;
  51.  
  52. while(increasing.size()>0 && arr[r] > increasing[increasing.size()-1].first){
  53. // cout << increasing[increasing.size()-1].first << "a" << endl;
  54. increasing.pop_back();
  55. // cout << increasing[increasing.size()-1].first << "b" << endl;
  56. }
  57. increasing.push_back({arr[r],r});
  58.  
  59. while (decreasing.size() > 0 && arr[r] < decreasing[decreasing.size()-1].first){
  60. decreasing.pop_back();
  61. }
  62.  
  63. decreasing.push_back(make_pair(arr[r],r));
  64.  
  65.  
  66. }
  67. else{
  68. l++;
  69. }
  70.  
  71.  
  72. }
  73. cout << ans;
  74. return 0;
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement