Submission #1357004

#TimeUsernameProblemLanguageResultExecution timeMemory
1357004biserailievaGift Boxes (EGOI25_giftboxes)C++20
19 / 100
2095 ms25792 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;
    for(int i=0;i<n;i++)
    {
        cin>>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)
        {
            map<int, int>freq;
            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;
    }
    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...