Advertisement
a53

cnt_seq_max_min

a53
Dec 8th, 2021
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <deque>
  3. #define ull unsigned long long
  4.  
  5. using namespace std;
  6.  
  7. const int NMAX = 1e6;
  8. int v[NMAX + 1], n, t, st = 1, dr = 1;
  9. deque <int> mini, maxi;
  10. ull ans;
  11.  
  12. void solve(){
  13.  
  14. // Fast IO
  15. ios :: sync_with_stdio(false);
  16. cin.tie(0);
  17. cout.tie(0);
  18.  
  19. cin >> n >> t;
  20.  
  21. for(int i = 1; i <= n; i++){
  22.  
  23. cin >> v[i]; // citirea se poate face in acelasi timp cu rezolvarea, intrucat
  24. // nu ne vor interesa niciodata elementele din (i, n], la pasul i
  25. // daca citirea se face separat, acest algoritm va lua 90p
  26.  
  27. while(!mini.empty() && v[i] < v[mini.back()])
  28. mini.pop_back();
  29.  
  30. while(!maxi.empty() && v[i] > v[maxi.back()])
  31. maxi.pop_back();
  32.  
  33. mini.push_back(i);
  34. maxi.push_back(i);
  35.  
  36. if(v[maxi.front()] - v[mini.front()] <= t)
  37. ans += dr - st + 1;
  38. else{
  39.  
  40. while(!maxi.empty() && !mini.empty() && v[maxi.front()] - v[mini.front()] > t){
  41.  
  42. if(maxi.front() == st)
  43. maxi.pop_front();
  44.  
  45. if(mini.front() == st)
  46. mini.pop_front();
  47.  
  48. st++;
  49. }
  50.  
  51. if(maxi.size() && mini.size())
  52. ans += dr - st + 1;
  53.  
  54. }
  55.  
  56. dr++;
  57. }
  58.  
  59. cout << ans;
  60.  
  61. }
  62.  
  63. int main(){
  64.  
  65. solve();
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement