Submission #1357023

#TimeUsernameProblemLanguageResultExecution timeMemory
1357023biserailievaGift Boxes (EGOI25_giftboxes)C++20
40 / 100
407 ms49332 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, t;
    cin>>t>>n;
    set<int>st;
    int A[n];
    int L=-1, R=-1;
    bool vtor=true;
    map<int, int>F;
    for(int i=0;i<n;i++)
    {
        cin>>A[i];
        F[A[i]]++;
        st.insert(A[i]);
        if(n==t+1 && st.size()<i+1 && L==-1 && R==-1)
        {
            L=i;
            R=i;
        }
        if(i<n/2 && st.size()<i+1)
        {
            vtor=false;
        }
    }
    if(n==t+1)
    {
        cout<<L<<' '<<R<<endl;
    }
    else if(vtor && n==2*t)
    {
        cout<<0<<' '<<n/2-1<<endl;
    }
    else if(!vtor && n==2*t)
    {
        int l=n/2;
        int r=n;
        int ans=n;
        while(l<=r)
        {
            vector<int> freq(t, 0);
            int mid=(l+r)/2;
            int cnt=0;
            bool valid=false;
            for(int i=0;i<mid;i++)
            {
                freq[A[i]]++;
                if(freq[A[i]]==1)
                {
                    cnt++;
                }
            }
            if(cnt==n/2)
            {
                valid=true;
            }
            if(valid)
            {
                ans=mid;
                L=0;
                R=mid-1;
                r=mid-1;
            }
            else
            {
                for (int j = mid; j < n; j++)
                {
                    if(freq[A[j-mid]]==1)
                    {
                        cnt--;
                    }
                    freq[A[j-mid]]--;
                    freq[A[j]]++;
                    if(freq[A[j]]==1)
                    {
                        cnt++;
                    }
                    if(cnt==n/2)
                    {
                        valid=true;
                    }
                    if(valid)
                    {
                        ans=mid;
                        L=j-mid+1;
                        R=j;
                        r=mid-1;
                        break;
                    }
                }
                if(!valid)
                {
                    l=mid+1;
                }
            }
        }
        cout<<L<<' '<<R<<endl;
    }
    else
    {
        map<int, int>f2;
        for(int i=0;i<n;i++)
        {
            f2[A[i]]++;
            if(f2[A[i]]==2 && F[A[i]]>2)
            {
                L=i;
                break;
            }
        }
        map<int, int>f3;
        for(int i=n-1;i>=0;i--)
        {
            f3[A[i]]++;
            if(f2[A[i]]==2 && F[A[i]]>2)
            {
                R=i;
                break;
            }
        }
        map<int, int>f4;
        for(int i=0;i<L;i++)
        {
            f4[A[i]]++;
            if(f4[A[i]]==2)
            {
                L=i;
                break;
            }
        }
        map<int, int>f5;
        for(int i=n-1;i>R;i--)
        {
            f5[A[i]]++;
            if(f5[A[i]]==2)
            {
                R=i;
            }
        }
        int lev, desen;
        for(int i=0;i<L;i++)
        {
            if(F[A[i]]>=2)
            {
                lev=i;
                break;
            }
        }
        for(int i=n-1;i>R;i--)
        {
            if(F[A[i]]>=2)
            {
                desen=i;
                break;
            }
        }
        if(L-lev>desen-R)
        {
            R=desen;
        }
        else
        {
            L=lev;
        }
        cout<<L-1<<' '<<R<<endl;
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...