| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1357039 | biserailieva | Gift Boxes (EGOI25_giftboxes) | C++20 | 454 ms | 49328 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;
bool tri=false;
int c2=0;
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(F[A[i]]==3)
{
tri=true;
}
if(F[A[i]]==2)
{
c2++;
}
}
if(n==t+1)
{
cout<<L<<' '<<R<<endl;
}
else if(tri)
{
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;
}
}
map<int, int>f6;
vector<pair<int, int>>V(t+1, pair<int, int>(-1, -1));
for(int i=0;i<L;i++)
{
f6[A[i]]++;
V[A[i]].first=i;
}
for(int i=n-1;i>R;i--)
{
f6[A[i]]++;
if(f6[A[i]]==2)
{
V[A[i]].second=i;
if(L-V[A[i]].first>V[A[i]].second-R)
{
R=V[A[i]].second;
}
else
{
L=V[A[i]].first;
}
}
}
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;
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)
{
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)
{
L=j-mid+1;
R=j;
r=mid-1;
break;
}
}
if(!valid)
{
l=mid+1;
}
}
}
cout<<L<<' '<<R<<endl;
}
else
{
int l=c2, r=n;
L=0;
R=n-1;
while(l<=r)
{
vector<int>freq(t+1, 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 && F[A[i]]==2)
{
cnt++;
}
}
if(cnt==c2)
{
valid=true;
}
if(valid)
{
L=0;
R=mid-1;
r=mid-1;
}
else
{
for(int j=mid;j<n;j++)
{
if(freq[A[j-mid]]==1 && F[A[j-mid]]==2)
{
cnt--;
}
freq[A[j-mid]]--;
freq[A[j]]++;
if(freq[A[j]]==1 && F[A[j]]==2)
{
cnt++;
}
if(cnt==c2)
{
valid=true;
}
if(valid)
{
L=j-mid+1;
R=j;
r=mid-1;
break;
}
}
if(!valid)
{
l=mid+1;
}
}
}
cout<<L<<' '<<R<<endl;
}
return 0;
}| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
