题目
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10, M = 1e8+10;
int tr[M], a[N];
int lowbit(int x)
{
return x & -x;
}
int update(int x, int d)
{
for(; x < M; x += lowbit(x)) tr[x] += d;
}
int query(int x)
{
int retval = 0;
for(; x; x -= lowbit(x)) retval += tr[x];
return retval;
}
int add(int l, int r, int d)
{
update(l, d);
update(r+1, -d);
}
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
int y; bool pass;
cin >> y >> pass;
a[i] = y;
if(pass) add(1, y+1, 1);
else add(y+2, M-1, 1);
}
sort(a+1, a+n+1);
int maxx = -1, index;
for(int i = n; i >= 1; i--)
{
int tmp = query(a[i]+1);
if(maxx < tmp) maxx = tmp, index = i;
}
cout << a[index];
return 0;
}
代码2
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1e5+10;
int s[2][N];
PII a[N];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a[i].x >> a[i].y;
}
sort(a+1, a+n+1);
for(int i = 0; i < 2; i++)
{
for(int j = 1; j <= n; j++)
{
s[i][j] = s[i][j-1] + (a[j].y == i);
}
}
int maxx = -1, ans;
for(int i = 1; i <= n; i++)
{
int d = s[0][i-1] + s[1][n] - s[1][i-1];
if(d >= maxx) maxx = d, ans = a[i].x;
while(i+1 <= n && a[i+1].x == a[i].x) i++;
}
cout << ans;
return 0;
}