Submission #548614

#TimeUsernameProblemLanguageResultExecution timeMemory
548614Olympia Martian DNA (BOI18_dna)C++17
68 / 100
1184 ms1048576 KiB
#include <cmath> #include <iostream> #include <set> #include <climits> #include <algorithm> #include <cassert> #include <vector> #include <iomanip> #include <type_traits> #include <string> #include <queue> #include <map> #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") typedef long long ll; using namespace std; template<class T> struct Seg { // comb(ID,b) = b const T ID = 0; T comb(T a, T b) { return a+b; } int n; vector<T> seg; void init(int _n) { n = _n; seg.assign(2*n,ID); } void pull(int p) { seg[p] = comb(seg[2*p],seg[2*p+1]); } void upd(int p, T val) { // set val at position p seg[p += n] = val; for (p /= 2; p; p /= 2) pull(p); } T query(int l, int r) { // sum on interval [l, r] T ra = ID, rb = ID; for (l += n, r += n+1; l < r; l /= 2, r /= 2) { if (l&1) ra = comb(ra,seg[l++]); if (r&1) rb = comb(seg[--r],rb); } return comb(ra,rb); } }; vector<Seg<int>> st; vector<int> arr; vector<pair<int,int>> queries; bool okay (int l, int r) { int R = queries.size(); for (int i = 0; i < R; i++) { if (st[i].query(l, r) < queries[i].second) { return false; } } return true; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, K, R; cin >> N >> K >> R; st.resize(R); for (int i = 0; i < R; i++) { st[i].init(N + 1); } arr.resize(N); for (int i = 0; i < N; i++) { cin >> arr[i]; } queries.resize(R); for (int i = 0; i < R; i++) { cin >> queries[i].first >> queries[i].second; } for (int i = 0; i < N; i++) { for (int j = 0; j < R; j++) { if (arr[i] == queries[j].first) { st[j].upd(i, 1); } } } int myMin = INT_MAX; for (int i = 0; i < N; i++) { if (!okay(i, N - 1)) { break; } int l = i; int r = N - 1; while (l != r) { int m = (l + r)/2; if (okay(i, m)) { r = m; } else { l = m + 1; } } //cout << i << " " << l << '\n'; myMin = min(myMin, l - i + 1); } if (myMin == INT_MAX) { cout << "impossible\n"; } else { cout << myMin; } }

Compilation message (stderr)

dna.cpp:14: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   14 | #pragma GCC optimization ("O3")
      | 
dna.cpp:15: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   15 | #pragma GCC optimization ("unroll-loops")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...