제출 #1150237

#제출 시각아이디문제언어결과실행 시간메모리
1150237thecrazycandy Martian DNA (BOI18_dna)C++20
68 / 100
2095 ms4032 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("Ofast") //#pragma GCC target("avx,avx2,fma") using namespace std; #define sped_up ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define ll long long const ll INF = (ll)1e9 + 1, INFL = (ll)1e18 + 1; const ll mod = (ll)1e9 + 7, MAXN = (ll)2e5 + 1; vector <pair <ll, ll>> v; ll a[MAXN]; ll c[MAXN]; ll n, k, r; bool f (ll m) { for (int i = 1; i < m; i++) c[a[i]]++; for (int i = m; i <= n; i++) { c[a[i]]++; ll no = 0; for (int j = 0; j < v.size(); j++) { if (c[v[j].first] < v[j].second) { no = 1; break; } } if (no == 0) { for (int j = i - m + 1; j <= i; j++) c[a[j]]--; return 1; } c[a[i - m + 1]]--; } for (int i = n - m + 2; i <= n; i++) c[a[i]]--; return 0; } int main() { sped_up; cin >> n >> k >> r; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= r; i++) { ll f, s; cin >> f >> s; v.push_back({f, s}); } ll l = 0, r = n + 1; while (l + 1 < r) { ll m = (l + r) / 2; if (!f(m)) l = m; else r = m; } if (r != n + 1) cout << r; else cout << "impossible"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...