import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
static int n, h, b, e;
static int[] c;
static int[] res;
static int[][] m;
static void sparse_table(int n) {
for (int i = 0; i < n; i++) {
m[i][0] = i;
}
for (int j = 1; 1 << j <= n; j++) {
for (int i = 0; i + (1 << j) - 1 < n; i++) {
if (c[m[i][j-1]] < c[m[i + (1 << (j - 1))][j-1]]) {
m[i][j] = m[i][j-1];
} else if (c[m[i + (1 << (j - 1))][j-1]] < c[m[i][j-1]]) {
m[i][j] = m[i + (1 << (j - 1))][j-1];
} else {
m[i][j] = m[i][j-1];
}
}
}
}
/*
* Returns first minimum
*/
static int query_spares_table(int i, int j) {
if (j > c.length) {
j = c.length;
}
int log = log2(j - i + 1);
if (c[m[i][log]] <= c[m[j - (1 << log) + 1][log]]) {
return m[i][log];
} else {
return m[j - (1 << log) + 1][log];
}
}
static int log2(int n) {
}
int runner = b-1;
int[] res = new int[e - b + 1];
int i = 0, bought = runner-1;
while (runner < e) {
int nextToBuy = runner + h - 1 > e - 1 ? e - 1 : runner + h - 1;
while (nextToBuy != runner && c[query_spares_table(runner + 1, nextToBuy)] <= c[runner]) {
nextToBuy = query_spares_table(runner+1, nextToBuy) - 1;
}
if (nextToBuy > bought) {
if (nextToBuy == runner) {
res[i] = 1;
bought++;
} else {
res[i] += nextToBuy - bought;
bought = nextToBuy;
}
}
i++;
runner++;
}
StringBuilder builder = new StringBuilder();
boolean start = true;
for (int r: res) {
if (start) {
builder.append(r);
} else {
builder.append("\t");
builder.append(r);
}
start = false;
}
return builder.toString();
}
// writer = new BufferedWriter(new FileWriter("output.txt"));
while ((input = reader.readLine()) != null) {
while (input.equals("")) {
input = reader.readLine();
}
data = input.split("\\s+");
input = reader.readLine();
while (input.equals("")) {
input = reader.readLine();
}
c
= Arrays.
asList(input.
split("\\s+")).
stream().
mapToInt(Integer::parseInt
).
toArray(); m = new int[n+1][log2(n) + 1];
sparse_table(n);
writer.
write(String.
format("%s", process
())); writer.newLine();
// writer.flush();
}
writer.close();
reader.close();
}
}