• C. Keshi Is Throwing a Party- Codeforces Global Round 17


    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

    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],那么就可以选该物品。

    1. #include
    2. # include
    3. # include
    4. using namespace std;
    5. typedef long long int ll;
    6. ll a[200000+10],b[200000+10];
    7. int n;
    8. bool check(ll mid)
    9. {
    10. int now=0;
    11. for(int i=1;i<=n;i++)
    12. {
    13. if(mid-now-1<=a[i]&&now<=b[i])
    14. now++;
    15. if(now>=mid)
    16. return 1;
    17. }
    18. return 0;
    19. }
    20. int main()
    21. {
    22. int t;
    23. cin>>t;
    24. while(t--)
    25. {
    26. cin>>n;
    27. for(int i=1;i<=n;i++)
    28. {
    29. cin>>a[i]>>b[i];
    30. }
    31. int left=0,right=n;
    32. while(left<=right)
    33. {
    34. int mid=(left+right)>>1;
    35. if(check(mid))
    36. left=mid+1;
    37. else
    38. right=mid-1;
    39. }
    40. cout<
    41. }
    42. return 0;
    43. }

  • 相关阅读:
    关于建筑八大员(住建厅七大员)考试难不难?合格技巧
    SpringBoot日志文件
    c++vector容器
    PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)
    【SpringMVC】_设置响应状态码与Header
    安装K8s基础环境软件(二)
    JVM-4
    【运行时的类型识别】
    Fluent批处理及.jou和.scm文件编写的相关操作
    300分钟吃透分布式缓存-08讲:MC系统架构是如何布局的?
  • 原文地址:https://blog.csdn.net/jisuanji2606414/article/details/126128724