#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/13 22:36
# @Author : Jzk
# @Site : 
# @File : pais2.py
# @Software: PyCharm
'''
排好序后,这个问题可以转化成左边0的个数+右边1的个数,因为左边元素肯定小于他,右边元素肯定大于他,
第一次遍历从 [0,m-1),每次出现一个0,就将下一个的阈值和num加入新的列表中,即[阈值,num]
第二次遍历从[m-1,0],每次出现一个1,num2就加1,,然后将与当前阈值对应的新列表中的num加上num2

然后对新列表li2进行排序,此时num的顺序是从小到大,
因为会出现重复阈值得分不同的情况,此时应该取较小的值

'''
m = int(input())
li = []
for i in range(m):
    li.append(list(map(int, input().split())))
# 排序
li.sort()
# li2第一项
li2 = [[li[0][0], 0]]
# 左边有多少个0,也就是预测挂科正确的个数
num = 0
a=0
# for i in range(m - 1):
#     if li[i][1] == 0 :
#         if li[i+1][0]!=li[i][0]:
#             num += 1+a
#             li2.append([num, li[i + 1][0]])
#         else:
#             a+=1
#     # 第一个是num,第二个是阈值
#             li2.append([ num,li[i + 1][0]])
#     else:
#         li2.append([ num,li[i + 1][0]])


for i in range(m-1):
    if li[i][0]!=li[i+1][0]:
        if li[i][1]==0:
            num+=1+a
            li2.append([num, li[i + 1][0]])
            a=0
        else:
            li2.append([num+a, li[i + 1][0]])
            a=0
    else:
        li2.append([num, li[i + 1][0]])
        if li[i][1]==0:
            a+=1




# 右边(包含自己)有多少个1,即预测不挂科正确的个数
num2 = 0
for i in range(m-1, -1, -1):
    if li[i][1] == 1:
        num2 += 1
    li2[i][0] += num2
# print(li2)
# 将li2排序,此时num的顺序是从小到大
li2.sort()
# print(li2)
print(li2[-1][1])
# so=set()
# li3=[]
# 去除重复的阈值,取得分小的
# for i in li2:
#     if i[1] not in so:
#         so.add(i[1])
#         li3.append(i)
# print(li3[-1][1])
# 测试用例
'''
6
0 0
1 0
1 1
3 1
5 1
7 1

'''
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐