Untitled

mail@pastecode.io avatarunknown
c_cpp
23 days ago
2.7 kB
2
Indexable
Never
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <deque>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <bitset>
#include <array>
#include <iomanip>

using namespace std;

using ll = long long;
using ull = unsigned long long;
using db = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pdd = pair<db, db>;
using tiii = tuple<int, int, int>;
using str = string;

#define vt vector
#define pb push_back
#define eb emplace_back
#define ins insert
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)x.size()

#define mp make_pair
#define mt make_tuple
#define fi first
#define se second


void solve() {
    int n, k;
    cin >> n >> k;
    vt<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];
    vt<pii> q(n);
    for (int i = 0; i < n; ++i) {
        q[i].second = -1;
    }
    vt<vt<int>> d(n);
    for (int i = 0; i < n; ++i) {
        if (q[a[i] - 1].second == -1)
            q[a[i] - 1].second = i;
            
        else {
            d[a[i] - 1].pb(i - 1 - q[a[i] - 1].second);
            q[a[i] - 1].se = i;
        }
    }
    
    // for (auto s : d) {
        
    //     for (int i : s) {
    //         cout << i << ' ';
    //     }
        
    //     cout << '\n';
    // }
    
    int answ = 0;
    
    for (auto s : d) {
        
        if (sz(s) > 0) {
            vt<int> p(n);
            p[0] = s[0];
            
            for (int i = 1; i < sz(s); ++i) {
                p[i] = p[i - 1] + s[i];
            }
            
            
            int cur = 0;
            for (int i = 0; i < sz(s); ++i) {
                int l = -1;
                int r = sz(s);
                
                while (r > l + 1) {
                    int m = (l + r) / 2;
                    if (p[m] <= p[i] + k) {
                        l = m;
                    } else {
                        r = m;
                    }
                }
                cur = max(cur, l - i + 1);
                
                // cout << i << ' ' << cur << '\n';
            }
            
            answ = max(answ, cur);
        }
    }
    
    
    cout << answ + 1 << endl;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
//     freopen("data.in", "r", stdin);
//     freopen("data.out", "w", stdout);
    int tests = 1;
//    cin >> tests;
    while (tests--) {
        solve();
    }
    return 0;
}