제출 #1150249

#제출 시각아이디문제언어결과실행 시간메모리
1150249thecrazycandy Martian DNA (BOI18_dna)C++20
100 / 100
40 ms4676 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; ll mp[MAXN]; ll a[MAXN]; ll c[MAXN]; ll n, k, r; bool f (ll m) { ll cnt = 0; for (int i = 1; i < m; i++) { c[a[i]]++; cnt += (c[a[i]] == mp[a[i]]); } for (int i = m; i <= n; i++) { c[a[i]]++; cnt += (c[a[i]] == mp[a[i]]); if (cnt == r) { for (int j = i - m + 1; j <= i; j++) c[a[j]]--; return 1; } cnt -= (c[a[i - m + 1]] == mp[a[i - m + 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; mp[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...