Submission #825050

#TimeUsernameProblemLanguageResultExecution timeMemory
825050zsomborLottery (CEOI18_lot)C++17
100 / 100
1807 ms8268 KiB
#include <iostream> #include <algorithm> #include <vector> using namespace std; int n, l, q, k, L, R, M, b; vector <int> a(1e4, 0); vector <int> v(1e4 + 1, 0); vector <pair<int, int>> Q; vector <vector<int>> ans(101, vector <int>(1e4 + 1)); vector <int> nw(101); int bin(int val) { L = -1, R = q; while (R - L > 1) { M = (L + R) / 2; (Q[M].first < val ? L = M : R = M); } return R; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> l; for (int i = 0; i < n; i++) cin >> a[i]; cin >> q; Q.resize(q); for (int i = 0; i < q; i++) { cin >> Q[i].first; Q[i].second = i; } sort(Q.begin(), Q.end()); for (int i = 1; i <= n - l; i++) { for (int j = 0; j < n - i; j++) { if (a[j] != a[j + i]) continue; L = max(0, j - l + 1), R = min(j + i, n - l); R -= i; if (L > R) continue; v[R]++; if (L) v[L - 1]--; } for (int j = n - l - i; j >= 0; j--) { v[j] += v[j + 1]; v[j + 1] = 0; b = bin(l - v[j]); ans[b][j]++; ans[b][j + i]++; } v[0] = 0; } for (int i = 1; i < q; i++) { for (int j = 0; j < n; j++) { ans[i][j] += ans[i - 1][j]; } } for (int i = 0; i < q; i++) nw[Q[i].second] = i; for (int i = 0; i < q; i++) { for (int j = 0; j <= n - l; j++) { cout << ans[nw[i]][j] << " "; } cout << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...