이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int N = 1e4 + 3, Q = 100 + 3;
const ll base = 1e9 + 7, mod = 1e9 + 9;
int n, l;
int a[N];
int q, k[Q];
int tmp[Q], inv[N];
int dp[N][Q];
void subtask5() {
copy(k, k + q, tmp + 1);
sort(tmp, tmp + q + 1);
int cnt = unique(tmp, tmp + q + 1) - tmp;
for (int i = 0; i < cnt; ++i)
inv[tmp[i]] = i;
for (int dist = 1; dist <= n - l; ++dist) {
int i(1), j(1 + dist), diff(0), ptr(0);
for (int k = 0; k < l; ++k) {
diff += a[i + k] != a[j + k];
if (diff > tmp[ptr]) ++ptr;
}
for (; j <= n - l + 1; ++i, ++j) {
++dp[i][ptr], ++dp[j][ptr];
diff -= a[i] != a[j];
if (diff < tmp[ptr]) --ptr;
diff += a[i + l] != a[j + l];
if (diff > tmp[ptr]) ++ptr;
}
}
for (int i = 1; i <= n; ++i)
for (int k = 1; k < cnt; ++k) dp[i][k] += dp[i][k - 1];
for (int i = 0; i < q; ++i)
for (int j = 1; j <= n - l + 1; ++j)
cout << dp[j][inv[k[i]]] << " \n"[j == n - l + 1];
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> l;
for (int i = 1; i <= n; ++i) cin >> a[i];
cin >> q;
for (int i = 0; i < q; ++i)
cin >> k[i];
subtask5();
}
# | 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... |