SEARCH - Dãy số

Tác giả: ladpro98

Ngôn ngữ: C++

#include <iostream>
#include <cstdio>

const int N = 200005;
using namespace std;
int m, n, p;
int a[N], b[N], c[N];
bool inA[N], inB[N], chk[N];

int main() {
    scanf("%d %d %d", &m, &n, &p);
    int cnt = 0;
    for(int i = 1; i <= m; i++) {
        scanf("%d", a + i);
        if (!inA[a[i]]) cnt++;
        inA[a[i]] = true;
    }
    for(int i = 1; i <= n; i++) {
        scanf("%d", b + i);
        inB[b[i]] = true;
    }
    for(int i = 1; i <= p; i++) scanf("%d", c + i);
    int res = 0, d, j;
    for(int i = 1; i <= p; i = j + 1) {
        j = i;
        if (!inB[c[i]]) {
            d = 0;
            for(j = i; j <= p && !inB[c[j]]; j++) {
                if (!chk[c[j]] && inA[c[j]]) d++;
                chk[c[j]] = true;
            }
            if (d >= cnt) res = max(res, j - i);
            for(int k = i; k < j; k++) chk[c[k]] = false;
        }
    }
    printf("%d", res);
	return 0;
}

Download