Submission #1298569

#TimeUsernameProblemLanguageResultExecution timeMemory
1298569HuyAT Martian DNA (BOI18_dna)C++20
100 / 100
166 ms32240 KiB
#include<bits/stdc++.h> #define newl '\n' const int N = 1e5 + 10; const int V = 1e7 + 10; const long long INF = 1e18; const long long M = 1e9 + 7; struct Solver{ int n,k,r; std::vector<int> a,b; std::vector<std::vector<int>> pos,add,remov; void readData(){ std::cin >> n >> k >> r; a.assign(n + 1,0); b.assign(n + 1,0); pos.resize(n + 1); remov.resize(n + 1); add.resize(n + 1); for(int i = 1;i <= n;++i){ std::cin >> a[i]; pos[a[i]].emplace_back(i); } for(int i = 1;i <= r;++i){ int p; std::cin >> p; std::cin >> b[p]; } } void solve(){ for(int i = 0;i < k;++i){ if(b[i] == 0){ continue; } for(int j = b[i] - 1;j < (int)pos[i].size();++j){ add[pos[i][j]].emplace_back(pos[i][j - b[i] + 1]); if(j < (int)pos[i].size() - 1){ remov[pos[i][j + 1]].emplace_back(pos[i][j - b[i] + 1]); } } } std::multiset<int> s; int ans = V; for(int i = 1;i <= n;++i){ for(int pos : add[i]){ s.insert(pos); } for(int pos : remov[i]){ s.erase(s.find(pos)); } if((int)s.size() == r){ ans = std::min(ans,i - *s.begin() + 1); } } if(ans == V){ std::cout << "impossible"; }else{ std::cout << ans; } } void main(){ readData(); solve(); } }; int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);std::cout.tie(nullptr); Solver().main(); 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...