제출 #1210633

#제출 시각아이디문제언어결과실행 시간메모리
1210633Theo830 Martian DNA (BOI18_dna)C++20
100 / 100
82 ms14404 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e9+7; const ll MOD = 998244353; typedef pair<ll,ll> ii; #define iii pair<ll,ii> #define id pair<ll,vector<ll> > #define f(i,a,b) for(ll i = a;i < b;i++) #define pb push_back #define vll vector<ll> #define F first #define S second #define all(x) (x).begin(), (x).end() ///I hope I will get uprating and don't make mistakes ///I will never stop programming ///sqrt(-1) Love C++ ///Please don't hack me ///@TheofanisOrfanou Theo830 ///Think different approaches (bs,dp,greedy,graphs,shortest paths,mst) ///Stay Calm ///Look for special cases ///Beware of overflow and array bounds ///Think the problem backwards ///Training int main(void){ ll n,k,r; cin>>n>>k>>r; ll arr[n]; ll re[k] = {0}; f(i,0,n){ cin>>arr[i]; } vector<ll>ex[k]; f(i,0,n){ ex[arr[i]].pb(i); } f(i,0,k){ reverse(all(ex[i])); } f(i,0,r){ ll b,q; cin>>b>>q; re[b] = max(re[b],q); } ll len = 0; f(i,0,k){ if(ex[i].size() < re[i]){ cout<<"impossible\n"; return 0; } if(re[i]){ len = max(len,ex[i][ex[i].size() - re[i]]); } } ll ans = len+1; f(i,0,n){ ex[arr[i]].pop_back(); if(ex[arr[i]].size() < re[arr[i]]){ break; } if(re[arr[i]]) len = max(len,ex[arr[i]][ex[arr[i]].size() - re[arr[i]]]); ans = min(ans,len - i); } cout<<ans<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...