我的代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, a[N];
bool vis[N];
int cnt = 0;
int nxt(int x) {
int l = x + 1, r = n, id = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (!vis[mid] && a[mid] > a[x]) {
r = mid - 1;
id = mid;
}
else l = mid + 1;
}
return id;
}
signed main() {
// freopen("1.in","r",stdin);
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; ++i) {
// if (vis[i]) continue;
int id = nxt(i);
vis[id] = 1;
}
for (int i = 1; i <= n; ++i) {
if (vis[i]) cnt++;
}
cout << n - cnt;
return 0;
}
为什么我会访问负数下标但我在luogu测过了?