CF1831B Array merging

 

#include <iostream>
#include <cstring>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int ca[N * 2], cb[N * 2],a[N<<1];
/*
void get(int n, int *bucket) {
    memset(bucket, 0, sizeof (int) * (n * 2 + 3));
    int last = 0, cnt = 0;
    for (int i = 1; i <= n; i++) {
        int temp;
        cin >> temp;
        if (temp == last)
            cnt++;
        else {
            bucket[last] = max(bucket[last], cnt);
            last = temp;
            cnt = 1;
        }
    }
    bucket[last] = max(bucket[last], cnt);
}
*/
void get(int n,int *b)//time-time 传输
{
    memset(b,0,sizeof(int)*(n*2+3));
    for(int i=1;i<=n;i++) cin>>a[i];
    int last=a[1],cnt=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]==last) cnt++;
        else
        {
            
            
            
            b[last]=max(b[last],cnt);
            last=a[i];
            cnt=1;
        }
    }
    b[a[n]]= max(b[a[n]], cnt);
}
    
    
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        get(n, ca);
        get(n, cb);
        int ans = 0;
        for (int i = 1; i <= (n << 1); i++)
            ans = max(ans, ca[i] + cb[i]);
        cout << ans << '\n';
    }
    return 0;
}
View Code
 

 

 
 
 
posted @ 2023-07-19 17:50  JMXZ  阅读(11)  评论(0)    收藏  举报