Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <deque>
- #define ull unsigned long long
- using namespace std;
- const int NMAX = 1e6;
- int v[NMAX + 1], n, t, st = 1, dr = 1;
- deque <int> mini, maxi;
- ull ans;
- void solve(){
- // Fast IO
- ios :: sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- cin >> n >> t;
- for(int i = 1; i <= n; i++){
- cin >> v[i]; // citirea se poate face in acelasi timp cu rezolvarea, intrucat
- // nu ne vor interesa niciodata elementele din (i, n], la pasul i
- // daca citirea se face separat, acest algoritm va lua 90p
- while(!mini.empty() && v[i] < v[mini.back()])
- mini.pop_back();
- while(!maxi.empty() && v[i] > v[maxi.back()])
- maxi.pop_back();
- mini.push_back(i);
- maxi.push_back(i);
- if(v[maxi.front()] - v[mini.front()] <= t)
- ans += dr - st + 1;
- else{
- while(!maxi.empty() && !mini.empty() && v[maxi.front()] - v[mini.front()] > t){
- if(maxi.front() == st)
- maxi.pop_front();
- if(mini.front() == st)
- mini.pop_front();
- st++;
- }
- if(maxi.size() && mini.size())
- ans += dr - st + 1;
- }
- dr++;
- }
- cout << ans;
- }
- int main(){
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement