제출 #1357336

#제출 시각아이디문제언어결과실행 시간메모리
1357336al_reem_2010Gift Boxes (EGOI25_giftboxes)C++20
100 / 100
84 ms8244 KiB
// اَللَهُمَ صَلِ عَلَىَ مُحَمَدٍ وَ آلِ مُحَمَدٍ
#include "bits/stdc++.h"
using namespace std ;
#define int long long
#define pb push_back
#define si size()
#define fi first
#define se second
#define all(a) a.begin(),a.end()
#define applejuice ios::sync_with_stdio(false) ; cin.tie(nullptr) ; cout.tie(nullptr) ;
const int inf=1e18 ;
const int mod=1e9+7 ;
const int maxn=5*1e5+7 ;
int tt=1 ;
int a[maxn] , cnt[maxn] ;
void solve() {
    int t , n ;
    cin >> t >> n ;
    for(int i=0 ; i<n ; i++) {
        cin >> a[i] ;
    }
    int st=1 , en=n , mid , mx=0 , l=-1 , r=-1 ;
    while(st<=en) {
        mid=(st+en)/2 ;
        for(int i=0 ; i<n ; i++) {cnt[a[i]]+=1 ;}
        for(int i=0 ; i<mid ; i++) {cnt[a[i]]-=1 ;}
        int cnt0=0 , cnt1=0 ;
        for(int i=0 ; i<t ; i++) {
            if(cnt[i]==0) {cnt0+=1 ;}
            if(cnt[i]==1) {cnt1+=1 ;}
        }
        bool A=0 ;
        if(cnt0+cnt1==t && cnt1>mx) {
            mx=cnt1 ;
            l=0 ;
            r=mid-1 ;
            A=1 ;
        }
        for(int i=1 ; i+mid-1<n ; i++) {
            cnt[a[i-1]]+=1 ;
            if(cnt[a[i-1]]==2) {cnt1-=1 ;}
            if(cnt[a[i-1]]==1) {cnt0-=1 ; cnt1+=1 ;}
            cnt[a[i+mid-1]]-=1 ;
            if(cnt[a[i+mid-1]]==1) {cnt1+=1 ;}
            if(cnt[a[i+mid-1]]==0) {cnt1-=1 ; cnt0+=1 ;}
            if(cnt0+cnt1==t && cnt1>mx) {
                mx=cnt1 ;
                l=i ;
                r=i+mid-1 ;
                A=1 ;
            }
        }
        fill(cnt,cnt+t,0) ;
        if(A) {en=mid-1 ;}
        else {st=mid+1 ;}
        //cout << mid << endl ;
    }
    cout << l << " " << r ;
}
signed main() {
    //wrong
    applejuice ;
    //cin >> tt ;
    while(tt--) {solve() ;}
}
/*
4 5
1 3 0 2 3
ans : 1 1

3 6
1 0 2 2 0 1
ans : 0 2

4 8
0 2 0 1 2 1 3 3
ans : 2 6

3 6
1 1 2 0 1 0
ans : 0 3

4 6
0 1 2 0 3 2
ans : 2 3

5 13
3 3 3 1 2 0 3 3 2 1 4 1 0
ans : 1 9
 */
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…