Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int fun(vector<int>& v, int k) {
- int n = v.size();
- set<int> st, st1;
- int ans = 0, cur = 0;
- auto add = [&] (int val) {
- if(st.size() == 0) {
- st.insert(val);
- st1.insert(-val);
- return;
- }
- auto it1 = st.upper_bound(val);
- auto it2 = st1.upper_bound(-val);
- if(it1 != st.end() && it2 != st1.end()) {
- cur -= (((*it1) + (*it2) > 1) ? 1 : 0);
- }
- if(it1 != st.end()) {
- cur += (((*it1) - val > 1) ? 1 : 0);
- }
- if(it2 != st1.end()) {
- cur += ((val + (*it2) > 1) ? 1 : 0);
- }
- // cout << "add = " << val << " " << (it1 != st.end() ? (*it1) : 756) << " " << (it2 != st1.end() ? *it2 : 756) << " " << cur << endl;
- st.insert(val);
- st1.insert(-val);
- return;
- };
- auto rem = [&] (int val) {
- if(st.size() == 1) {
- st.erase(val);
- st1.erase(-val);
- return;
- }
- auto it1 = st.upper_bound(val);
- auto it2 = st1.upper_bound(-val);
- if(it1 != st.end() && it2 != st1.end()) {
- cur += (((*it1) + (*it2) > 1) ? 1 : 0);
- }
- if(it1 != st.end()) {
- cur -= (((*it1) - val > 1) ? 1 : 0);
- }
- if(it2 != st1.end()) {
- cur -= ((val + (*it2) > 1) ? 1 : 0);
- }
- // cout << "rem = " << val << " " << (it1 != st.end() ? (*it1) : 756) << " " << (it2 != st1.end() ? *it2 : 756) <<" " << cur << endl;
- st.erase(val);
- st1.erase(-val);
- };
- for(int i = 0; i < n; i++) {
- add(v[i]);
- // cout << "k = " << k << " i = " << i << " cur = " << cur << endl;
- // for(auto i : st) {
- // cout << i << " ";
- // }
- // cout << endl;
- if(i >= k - 1) {
- ans += cur;
- rem(v[i - k + 1]);
- }
- }
- // cout << "k = " << k << " ans = " << ans << endl;
- return ans;
- }
- int main()
- {
- int n;
- cin >> n;
- vector<int> v(n);
- for(int i = 0; i < n; i++) {
- cin >> v[i];
- }
- int ans = 0;
- for(int i = 2; i <= n; i++) {
- ans += fun(v, i);
- }
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment