Submission #927088

#TimeUsernameProblemLanguageResultExecution timeMemory
927088vjudge1 Martian DNA (BOI18_dna)C++17
0 / 100
450 ms18512 KiB
// #pragma GCC target ("avx2") // #pragma GCC optimization ("O3") // #pragma GCC optimization ("unroll-loops") #include <bits/stdc++.h> #define int long long #define ff first #define ss second #define pb push_back #define yes cout<<"Yes\n" #define no cout<<"No\n" #define no1 cout<<"-1\n" using namespace std; const int N = 2e5+100; const int M = 1e5+10; const int INF = 1e18; const int mod = 1e9+7; // int binpow (int a, int n) { // if (n == 0) // return 1; // if (n % 2 == 1) // return (binpow (a, n-1) * a)%mod; // else { // int b = binpow (a, n/2); // return (b * b)%mod; // } // } int n,k,R; int a[N]; map<int,int> mn; map<int,int> mx; map<int,int> m; int d[N]; void solve(){ cin>>n>>k>>R; for(int i = 1;i<=n;i++){ cin>>a[i]; if(!mn[a[i]]) mn[a[i]] = i; mx[a[i]] = i; m[a[i]]++; } int l = INF; int r = 0; while(R--){ int b,q; cin>>b>>q; d[b] = q; if(m[b] < q){ cout<<"impossible\n"; return; } l = min(l,mn[b]); r = max(r,mx[b]); } m.clear(); for(int i = l;i<=r;i++){ m[a[i]]++; } int bl = l; int br = r; while(1){ if(l==r){ break; } int x = m[a[l]]-1-d[a[l]]; int y = m[a[r]]-1-d[a[r]]; if(x<0 && y<0) break; else if(y<0 || x>y){ m[a[l]]--; l++; } else{ m[a[r]]--; r--; } } m.clear(); for(int i = bl;i<=br;i++){ m[a[i]]++; } while(1){ if(bl==br){ break; } int x = m[a[bl]]-1-d[a[bl]]; int y = m[a[br]]-1-d[a[br]]; if(x<0 && y<0) break; else if(x<0 || x<y){ m[a[br]]--; br--; } else{ m[a[bl]]--; bl++; } } cout<<min(r-l+1,br-bl+1)<<'\n'; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); // cout.tie(nullptr); int t = 1; // cin>>t; // cout<<""; for(int i = 1;i<=t;i++){ // cout<<"Case "<<i<<": "; solve(); // cout<<'\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...