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# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Linq;//リストの使用
using System.Collections.Generic;
using System.Text;//テキストの高速出力に必要
class Program
{
	static void Main()
	{
		string[] input = Console.ReadLine().Split(' ');
		int n = int.Parse(input[0]);
		int k = int.Parse(input[1]);
		long[] nums = Array.ConvertAll(Console.ReadLine().Split(' '),long.Parse);
    long answer = n-k+1;
    long[] bits = new long[n+1];

    if(n > k)
    {
      for(int i = 0; i < k+1; i++)
      {
        bits = BitAdd(bits, nums[i]+1, 1);
        //Console.WriteLine((nums[i]+1)+" "+bits[nums[i]+1]);
      }
    }

    for(int i = 0; i < n-k; i++)
    {
      if(BitSum(bits, nums[i]+1) == 1 && BitSum(bits, nums[i+k]+1) == k+1) answer--;
      //Console.WriteLine((BitSum(bits, nums[i]+1)) + " "+(nums[i+k]+1)+" "+(BitSum(bits, nums[i+k]+1)));

      if(i < n-k-1)
      {
        bits = BitAdd(bits, nums[i]+1, -1);
        bits = BitAdd(bits, nums[i+k+1]+1, 1);
      }
    }

		Console.WriteLine(answer);
	}

  static long[] BitAdd(long[] bits, long i, long x)//BITでiだけにx加算。O(logn)
  {
    int n = bits.Length-1;
    while(i <= n)
    {
      bits[i] += x;
      i += i&-i;
    }
    return bits;
  }

  static long BitSum(long[] bits, long i)//BITでi以下の総和を計算。O(logn)
  {
    long sum = 0;
    while(i > 0)
    {
      sum += bits[i];
      i -= i&-i;
    }
    return sum;
  }
  
}