Submission #1162313

#TimeUsernameProblemLanguageResultExecution timeMemory
1162313LithaniumLottery (CEOI18_lot)C++20
100 / 100
2417 ms8832 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; vector<pair<int, int>> diag; int dt[10005]; int queries[105]; vector<int> comp; vector<int> ans[10005]; int psum[10005]; int N, K; void solve() { // Solve this diagonal int n = diag.size(); for (int i = 0; i <= n; i ++) psum[i] = 0; for (int i = 0; i < n; i ++) if (dt[diag[i].first] == dt[diag[i].second]) { // update the diagonal int p = max(0, i - K + 1); psum[p] ++, psum[i+1] --; } for (int i = 0; i < n; i ++) { if (i > 0) psum[i] += psum[i-1]; auto [a, b] = diag[i]; if (a + K - 1 > N or b + K - 1 > N) break; int ind = lower_bound(comp.begin(), comp.end(), K-psum[i]) - comp.begin(); ans[a][ind] ++; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> N >> K; for (int i = 1; i <= N; i ++) cin >> dt[i]; int Q; cin >> Q; for (int i = 1; i <= Q; i ++) { cin >> queries[i]; comp.push_back(queries[i]); } sort(comp.begin(), comp.end()); comp.resize(unique(comp.begin(), comp.end()) - comp.begin()); for (int i = 1; i <= N; i ++) ans[i].resize(comp.size()+1); // Make the diagonals for (int i = 2; i <= N; i ++) { diag.clear(); int I = i, J = 1; while (max(I, J) <= N) { diag.push_back({I, J}); I ++, J ++; } solve(); } for (int j = 2; j <= N; j ++) { diag.clear(); int I = 1, J = j; while (max(I, J) <= N) { diag.push_back({I, J}); I ++, J ++; } solve(); } for (int j = 1; j <= N; j ++) for (int i = 1; i < ans[j].size(); i ++) ans[j][i] += ans[j][i-1]; for (int i = 1; i <= Q; i ++) { int ind = lower_bound(comp.begin(), comp.end(), queries[i]) - comp.begin(); for (int j = 1; j <= N-K+1; j ++) { cout << ans[j][ind] << " "; } 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...