#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e4;
const int qmax = 100;
int n, l, q;
int v[nmax + 5], k[qmax + 5];
int pd[nmax + 5], md[nmax + 5];
int c[nmax + 5];
int cnt[nmax + 5][qmax + 5];
vector<int> a;
int get_val(int val)
{
int st = 1;
int dr = a.size();
int poz = q + 1;
while(st <= dr)
{
int mij = (st + dr) >> 1;
if(a[mij - 1] >= val)
{
poz = mij;
dr = mij - 1;
}
else
{
st = mij + 1;
}
}
return poz;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
#ifdef home
freopen("nr.in","r",stdin);
freopen("nr.out","w",stdout);
#endif // home
cin>>n>>l;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>k[i];
a.push_back(k[i]);
}
sort(a.begin(), a.end());
for(int i=n;i>=1;i--)
{
c[i] = get_val(i);
}
for(int d=1;d<n;d++)
{
for(int i=1;i+d<=n;i++)
{
if(v[i] == v[i + d])
{
continue;
}
int sta = 0, dra = 0, stb = 0, drb = 0;
if(i >= l)
{
sta = i - l + 1;
dra = i;
stb = i + d - l + 1;
drb = i + d;
}
else
{
sta = 1;
dra = i;
stb = d + 1;
drb = i + d;
}
++pd[sta];
--pd[dra + 1];
++md[stb];
--md[drb + 1];
}
for(int i=1;i<=n;i++)
{
pd[i] += pd[i - 1];
md[i] += md[i - 1];
if(i + d + l - 1 <= n)
{
++cnt[i][c[pd[i]]];
}
if(i - d >= 1)
{
++cnt[i][c[md[i]]];
}
}
for(int i=1;i<=n;i++)
{
pd[i] = md[i] = 0;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=q;j++)
{
cnt[i][j] += cnt[i][j - 1];
}
}
for(int i=1;i<=q;i++)
{
for(int j=1;j<=n-l+1;j++)
{
cout<<cnt[j][get_val(k[i])]<<' ';
}
cout<<'\n';
}
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... |