#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<string>
#include<cmath>
#include <iomanip>
#include<numeric>

using namespace std;

long long maxof(long long* N, long long p){
    long long big = N[0];
    for(long long i = 0; i < p; i++){
        if(big < N[i]){
            big = N[i];
        }
    }
    return big;
}

long long pow2(long long a, long long b){
    long long ans = 1;
    for(long long i = 0; i <b; i++){
        ans *= a;
    }
    return ans;
}

long long lcm(long long a,long long b){
    long long r, x, tmp;
    x = a * b;
 
  /* 自然数 a > b を確認・入替 */
    if(a<b){
    tmp = a;
    a = b;
    b = tmp;
  }
 
  /* ユークリッドの互除法 */
  r = a % b;
  while(r!=0){
    a = b;
    b = r;
    r = a % b;
  }
  return x/b;
}

long long facto(long long k){
    long long ans = 1;
    for(long long i = 1; i < k+1; i++){
        ans *= i;
    }
    return ans;
}

//ｘがaの中で何番目か
long long nanban(long long x, long long* a, long long n){
    long long mi = 0;
    for(long long i = 0; i < n; i++){    
        if(x >= a[i]){
            mi += 1;
        }
    }
    return n - mi;
}

#include<iostream>
#include<time.h>
#include<stdlib.h>
 
using namespace std;
 
void swap(long long i, long long j, long long* A, long long* B);
void quicksort_with_index(long long l, long long r, long long* A, long long* B);
long long selectrandomposition(long long l, long long r, long long* A);
long long partition(long long l, long long r, long long* A, long long* B);
 
long long selectrandomposition(long long l, long long r, long long* A){
    long long ans = (long long)rand()%(r - l + 1) + l;
    return ans;
}
 
void swap(long long i, long long j, long long* A, long long* B){
    long long tmpa = 0; long long tmpb = 0;
    tmpa = A[i]; tmpb = B[i];
    A[i]=A[j]; B[i] = B[j];
    A[j] = tmpa; B[j] = tmpb;
}
 
long long partition(long long l, long long r, long long* A, long long* B){
    long long rand = selectrandomposition(l, r, A);
    swap(rand, r, A, B); 
    long long pivot = A[r];
    long long i = l - 1;
    long long j = r;
 
    for(;;){
        for(i++; A[i] < pivot; i++){}
        for(j--; A[j] > pivot && (i < j); j--){}
        if(i >= j) break;
        swap(i, j, A, B);
    }
    swap(i, r, A, B);
    return i;
}
 
//Aに従ってBをソートします。Aに付帯した状態Bが、Aの昇順で並び替えられます。Aも並び変わるので、コピーを取っておいてもよい。
void quicksort_with_index(long long l, long long r, long long* A, long long* B){
    if(l < r){
        long long i = partition(l, r, A, B);
        quicksort_with_index(l, i - 1, A, B);
        quicksort_with_index(i + 1, r, A, B);
    }
}
 
int main(void){
    srand(time(NULL));
    long long n = 0;
    cin >> n;
    long long* A = (long long*)malloc(sizeof(long long)*n);
    long long* Aprime = (long long*)malloc(sizeof(long long)*n);
    
    for(long long i = 0; i < n; i++) A[i] = 0;
    for(long long i = 0; i < n; i++) cin >> A[i];
    for(long long i = 0; i < n; i++) Aprime[i] = A[i];
    
    long long* B = (long long*)malloc(sizeof(long long)*n);
    for(long long i = 0; i < n; i++) B[i] = i + 1;
 
 
    quicksort_with_index(0, n-1, A, B);
    
    for(long long i = 0; i < n-1; i++){
        if(A[i] == A[i+1]){cout << "NO";
        return 0;
        }
    }

    cout << "YES";
    
    return 0;
}

Measured memory_bytes: 4992