0的个数就是 数字的长度 - 1的个数
1的个数就是 区间前缀和(1的和)
感觉这个代码要简单一些~
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
#define x first
#define y second
const int N = 1e5 + 10;
PII a[N];
int n, sum[N];
int main(){
cin >> n;
for (int i = 1; i <= n; i ++ ) scanf("%d%d", &a[i].x, &a[i].y);
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i ++ ) sum[i] = sum[i - 1] + a[i].y;
int last = 0, res = 0, mx = 0;
for (int i = 1; i <= n; i ++) {
int t = last - sum[last] + sum[n] - sum[last];
if (t >= mx) res = a[i].x ,mx = t;
while (i <= n && a[i].x == a[i + 1].x) i ++;
last = i;
}
cout << res;
}