#include <bits/stdc++.h>
using namespace std;
int const MAX=1e6+5;
int const MOD=1e6+3;
int v[MAX];
int n,k;
int tip[MAX];
void read(){
cin>>n>>k;
int i;
for(i=1;i<=n-k+1;++i)
cin>>v[i];
}
void restrictions(){
int i;
for(i=1;i<=n-k;++i)
if(v[i]<v[i+1]){
tip[i]='0';
tip[i+k]='1';
}
else
if(v[i]>v[i+1]){
tip[i]='1';
tip[i+k]='0';
}
}
void umple(int ind){
if(ind-k>0 && !tip[ind-k]){
tip[ind-k]=tip[ind];
umple(ind-k);
}
if(ind+k<=n && !tip[ind+k]){
tip[ind+k]=tip[ind];
umple(ind+k);
}
}
void umplere(){
int i;
for(i=1;i<=n;++i)
if(tip[i])
umple(i);
}
pair<int,int> rasp(){
int cnt1=0;
int cnt2=0;
int i;
for(i=1;i<=k;++i){
if(!tip[i])
++cnt1;
if(tip[i]=='1')
++cnt2;
}
return {cnt1,v[1]-cnt2};
}
int fact[MAX];
void get_fact(){
fact[0]=1;
int i;
for(i=1;i<MAX;++i)
fact[i]=1LL*fact[i-1]*i%MOD;
}
int bin_exp(int base,int exp){
int rez=1;
while(exp){
if(exp&1)
rez=1LL*rez*base%MOD;
base=1LL*base*base%MOD;
exp/=2;
}
return rez;
}
int comb(int n,int k){
return 1LL*fact[n]*bin_exp(fact[k],MOD-2)%MOD*bin_exp(fact[n-k],MOD-2)%MOD;
}
void write(int ans){
cout<<ans;
}
int main()
{
read();
restrictions();
umplere();
pair<int,int>rsp=rasp();
get_fact();
write(comb(rsp.first,rsp.second));
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |