当前位置:网站首页>C. Keshi Is Throwing a Party- Codeforces Global Round 17
C. Keshi Is Throwing a Party- Codeforces Global Round 17
2022-08-03 21:03:00 【秦小咩】
C. Keshi Is Throwing a Party
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Keshi is throwing a party and he wants everybody in the party to be happy.
He has nn friends. His ii-th friend has ii dollars.
If you invite the ii-th friend to the party, he will be happy only if at most aiai people in the party are strictly richer than him and at most bibi people are strictly poorer than him.
Keshi wants to invite as many people as possible. Find the maximum number of people he can invite to the party so that every invited person would be happy.
Input
The first line contains a single integer tt (1≤t≤104)(1≤t≤104) — the number of test cases. The description of the test cases follows.
The first line of each test case contains a single integer nn (1≤n≤2⋅105)(1≤n≤2⋅105) — the number of Keshi's friends.
The ii-th of the following nn lines contains two integers aiai and bibi (0≤ai,bi<n)(0≤ai,bi<n).
It is guaranteed that the sum of nn over all test cases doesn't exceed 2⋅1052⋅105.
Output
For each test case print the maximum number of people Keshi can invite.
Example
input
Copy
3 3 1 2 2 1 1 1 2 0 0 0 1 2 1 0 0 1
output
Copy
2 1 2
Note
In the first test case, he invites the first and the second person. If he invites all of them, the third person won't be happy because there will be more than 11 person poorer than him.
=========================================================================
二分和贪心,二分枚举选的个数,判定函数里面运用贪心思想,能选就选。选一个的话,如果剩下的k-cnt-1个少于a[i],并且已经被选的 cnt<=b[i],那么就可以选该物品。
#include <iostream>
# include<algorithm>
# include<cstring>
using namespace std;
typedef long long int ll;
ll a[200000+10],b[200000+10];
int n;
bool check(ll mid)
{
int now=0;
for(int i=1;i<=n;i++)
{
if(mid-now-1<=a[i]&&now<=b[i])
now++;
if(now>=mid)
return 1;
}
return 0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
}
int left=0,right=n;
while(left<=right)
{
int mid=(left+right)>>1;
if(check(mid))
left=mid+1;
else
right=mid-1;
}
cout<<right<<endl;
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
双线性插值公式推导及Matlab实现
Power button - 203 - remove the list elements linked list
canvas螺旋动画js特效
有趣的opencv-记录图片二值化和相似度实现
XSS线上靶场---prompt
《富爸爸,穷爸爸》思维导图和学习笔记
leetcode 16.01. Swap numbers (swap the values of 2 numbers without using temporary variables)
XSS测试
Several difficult problems in DDD
从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
error: C1083: 无法打开包括文件: “QString”: No such error: ‘QDir‘ file not found
Leetcode 16. Numerical integral power (power + fast recursive/iteration)
图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门
为什么 BI 软件都搞不定关联分析
关于shell脚本的一些思考
LitJson报错记录
LeetCode_位数统计_中等_400.第 N 位数字
解决This application failed to start because no Qt platform plugin could be initialized的办法
AWTK开发编译环境踩坑记录1(编译提示powershell.exe出错)
XSS holes emersion