# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1129664 | KasymK | Martian DNA (BOI18_dna) | C++20 | 2095 ms | 3000 KiB |
#include "bits/stdc++.h"
using namespace std;
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define tr(i, c) for(auto i = c.begin(); i != c.end(); ++i)
#define wr puts("----------------")
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
const int N = 2e5+5;
int v[N], sm[N];
int main(){
int n, k, q;
scanf("%d%d%d", &n, &k, &q);
for(int i = 1; i <= n; ++i)
scanf("%d", v+i);
vector<pii> A;
while(q--){
int a, b;
scanf("%d%d", &a, &b);
A.pb({a, b});
}
auto is = [&](int x) -> bool {
memset(sm, 0, sizeof sm);
deque<int> dq;
for(int i = 1; i <= x; ++i)
dq.pb(v[i]), sm[v[i]]++;
bool ok=1;
for(int ad = 0; ad < (int)A.size(); ++ad)
ok&=(A[ad].ss<=sm[A[ad].ff]);
if(ok)
return 1;
for(int i = x+1; i <= n; ++i){
ok=1;
sm[dq[0]]--;
dq.pop_front();
dq.pb(v[i]);
sm[v[i]]++;
for(int ad = 0; ad < (int)A.size(); ++ad)
ok&=(A[ad].ss<=sm[A[ad].ff]);
if(ok)
return 1;
}
return 0;
};
int l=1, r=n, answer=-1;
while(l<=r){
int mid=(l+r)>>1;
if(is(mid))
r=mid-1, answer=mid;
else
l=mid+1;
}
if(~answer)
printf("%d\n", answer);
else
puts("impossible");
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |