제출 #1194386

#제출 시각아이디문제언어결과실행 시간메모리
1194386Valters07 Martian DNA (BOI18_dna)C++20
100 / 100
138 ms24760 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt,tune=native") #define fio ios_base::sync_with_stdio(0);cin.tie(0); #define ll long long #define ld long double #define en exit(0); #define pb push_back #define fi first #define se second using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int N = 2e5 + 5; const int INF = 1e9 + 5; vector<int> pos[N], ops[N]; int main() { fio // ifstream cin("in.in"); int n, k, r; cin >> n >> k >> r; int a[n + 1]; for(int i = 0;i < k;i++) pos[i].pb(0); for(int i = 1;i <= n;i++) { cin >> a[i]; pos[a[i]].pb(i); } int to = n; while(r--) { int val, mn; cin >> val >> mn; vector<int> &ve = pos[val]; int sz = ve.size(); if(sz - 1 < mn) return cout << "impossible", 0; for(int i = mn;i < sz;i++) { int l = ve[i - mn] + 1, r = ve[i - mn + 1]; int x = ve[i]; ops[l].pb(x); ops[r + 1].pb(-x); } to = min(to, ve[sz - mn]); } int res = INF; multiset<int> s; for(int i = 1;i <= to;i++) { for(auto x:ops[i]) { if(x > 0) s.insert(x); else s.erase(s.find(-x)); } assert(!s.empty()); int r = *s.rbegin(); res = min(res, r - i + 1); } cout << res; return 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...