Problem:
Score : 700 points

Problem Statement

Snuke has a permutation (P_0,P_1,\cdots,P_{N-1}) of (0,1,\cdots,N-1).

Now, he will perform the following operation exactly once:

Choose K consecutive elements in P and sort them in ascending order.

Find the number of permutations that can be produced as P after the operation.

Constraints

2 \leq N \leq 200000

2 \leq K \leq N

0 \leq P_i \leq N-1

P_0,P_1,\cdots,P_{N-1} are all different.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
P_0 P_1 \cdots P_{N-1}

Output

Print the number of permutations that can be produced as P after the operation.

Sample Input 1

5 3
0 2 1 4 3

Sample Output 1

2

Two permutations can be produced as P after the operation: (0,1,2,4,3) and (0,2,1,3,4).

Sample Input 2

4 4
0 1 2 3

Sample Output 2

1

Sample Input 3

10 4
2 0 1 3 7 5 4 6 8 9

Sample Output 3

6

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
#define LLINF 9223372036854775807
#define MOD ll(1e9+7)
#define all(x) (x).begin(),(x).end()
#define dbg(x) cerr<<#x<<": "<<x<<endl

int main(){
    int n, k;
    cin >> n >> k;

    vector<int> p(n);
    for(int i = 0; i < n; i++){
        cin >> p[i];
    }

    vector<int> diff(n,0);
    int ans = 1;
    for(int i = 0; i < n-1; i++){
        if(p[i+1]-p[i]>0){
            diff[i+1] = diff[i]+1;
        }else{
            diff[i+1] = 0;
        }
        if(diff[i+1]>=k-1){
            ans = 2;
        }
    }
    if(diff[k-1] == k-1){
        ans--;
    }

    set<int> st;
    for(int i = 0; i < k; i++){
        st.insert(p[i]);
    }
    int kmin = *st.begin();
    int kmax = *(--st.end());\
    for(int i = 0; i < n-k+1-1; i++){
        if(p[i] != kmin || p[i+k] < kmax){
            if(diff[i+k]<k-1){
                ans++;
            }
        }
        st.erase(p[i]);
        st.insert(p[i+k]);
        kmin = *st.begin();
        kmax = *(--st.end());
    }
    cout << ans << endl;

    return 0;
}