Submission #805054

#TimeUsernameProblemLanguageResultExecution timeMemory
805054Valaki2Lottery (CEOI18_lot)C++14
20 / 100
22 ms1748 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back const int maxn = 10000; int n, l, q; int v[1 + maxn]; int interval_count; vector<vector<int> > indices, blocks; int thelog; vector<int> x, y; int len; bool cmp(const int &a, const int &b) { if(x[a] < x[b]) { return true; } if(x[a] > x[b]) { return false; } return (y[(a + len) % n] < y[(b + len) % n]); } void do_step(vector<int> &idx, vector<int> &block) { sort(idx.begin(), idx.end(), cmp); for(int i = 1; i < n; i++) { int j1 = idx[i], j2 = idx[i - 1]; if(!cmp(j2, j1) && !cmp(j1, j2)) { block[j1] = block[j2]; } else { block[j1] = block[j2] + 1; } } } bool easy_cmp(const int &a, const int &b) { return v[a + 1] < v[b + 1]; } void solve() { cin >> n >> l; for(int i = 1; i <= n; i++) { cin >> v[i]; } int k0; cin >> q >> k0; interval_count = n - l + 1; while((1 << thelog) <= l) { thelog++; } vector<int> all_indices(n); for(int i = 0; i < n; i++) { all_indices[i] = i; } indices.assign(thelog, all_indices); blocks.assign(thelog, vector<int> (n, 0)); sort(indices[0].begin(), indices[0].end(), easy_cmp); for(int i = 1; i < n; i++) { if(v[indices[0][i] + 1] == v[indices[0][i - 1] + 1]) { blocks[0][indices[0][i]] = blocks[0][indices[0][i - 1]]; } else { blocks[0][indices[0][i]] = blocks[0][indices[0][i - 1]] + 1; } } for(int i = 1; i < thelog; i++) { len = (1 << (i - 1)); x = y = blocks[i - 1]; do_step(indices[i], blocks[i]); } vector<int> idx = all_indices, block(n, 0); bool was = false; for(int i = 0; i < thelog; i++) { if(l & (1 << i)) { if(!was) { was = true; idx = indices[i]; block = blocks[i]; len = (1 << i); } else { x = block; y = blocks[i]; do_step(idx, block); len += (1 << i); } } } vector<int> ans(1 + n, 0); vector<int> block_cnt(n, 0); for(int i = 0; i < n; i++) { if(i + l <= n) { block_cnt[block[i]]++; } } for(int i = 1; i <= interval_count; i++) { cout << block_cnt[block[i - 1]] - 1 << " "; } cout << "\n"; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; } /* 6 2 1 2 1 3 2 1 1 0 */
#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...