首先,容易证明满足条件的$ip_{i}$必然是一个前缀

将其看成一张二分图,$i$向满足$ip_{i}<xy$的$p_{i}$连边,即找到一个前缀满足其有完美匹配

二分枚举前缀长度$k$,根据hall定理,即要求$\forall S\in [1,k],\lfloor\frac{xy-1}{\min_{i\in S}i}\rfloor\ge |S|$,很明显$S$是一个后缀时最难满足,换言之即要求$\forall 1\le i\le k,\lfloor\frac{xy-1}{i}\rfloor\ge k-i+1$($S=[i,k]$)

这又等价于$xy>ik-i^{2}+i$,后者是一个关于$i$的二次函数,求最大值即可判定

还有一个特殊的问题,左边的$x$和右边的$y$都不能被选入答案,换言之,即当$i\le x$,右式应为$k-i$;当$\lfloor\frac{xy-1}{\min_{i\in S}i}\rfloor\ge y$,左式(即该式)应为$\lfloor\frac{xy-1}{\min_{i\in S}i}\rfloor-1$

同时对于第二种情况,可以对$|S|$分类讨论,若$|S|<y$则减1无影响,若$|S|\ge y$则必然要减1(若该值小于$y$减1同样无影响),减1也可以看作对$|S|$加1,即$|S|\ge y$时可以加1

更具体的,对$i$作以下分类讨论:

1.对于$1\le i\le \min(x-1,k-y+1)$,求出$-i^{2}+(k+1)i$的最大值;

2.若$x\le k-y+1$,则对于$x<i\le k-y+1$,求出$-i^{2}+(k+2)i$的最大值;若$k-y+1<x$,则对于$k-y+1<i\le \min(x-1,k)$,求出$-i^{2}+ki$的最大值;

3.若$\max(x,k-y+1)<i\le k$,求出$-i^{2}+(k+1)i$的最大值

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 int t;
5 ll x,y;
6 ll get_mx(ll b,ll l,ll r){
7 if (l>r)return 0;
8 if (b%2==0){
9 if ((l<=b/2)&&(b/2<=r))return b*b/4;
10 return max((b-l)*l,(b-r)*r);
11 }
12 if ((l<=b/2)&&(b/2<=r)||(l<=b/2+1)&&(b/2+1<=r))return (b/2)*(b/2+1);
13 return max((b-l)*l,(b-r)*r);
14 }
15 bool pd(ll k){
16 if (get_mx(k+1,1,min(x-1,k-y+1))>=x*y)return 0;
17 if (get_mx(k+2,x+1,k-y+1)>=x*y)return 0;
18 if (get_mx(k,k-y+2,min(x-1,k))>=x*y)return 0;
19 if (get_mx(k+1,max(x,k-y+1)+1,k)>=x*y)return 0;
20 return 1;
21 }
22 int main(){
23 scanf("%d",&t);
24 while (t--){
25 scanf("%lld%lld",&x,&y);
26 if (x>y)swap(x,y);
27 ll l=0,r=2e9;
28 while (l<r){
29 ll mid=(l+r+1>>1);
30 if (pd(mid))l=mid;
31 else r=mid-1;
32 }
33 printf("%lld\n",l-(l>=x));
34 }
35 }

[atARC094D]Worst Case的更多相关文章

  1. AtCoder Regular Contest 094 D Worst Case

    Worst Case 思路: 使 a <= b 当 a == b 时 或者 a == b - 1 时,答案显然为 2 * (a - 1) 否则找到最大的 c ,使得 c * c < a * ...

  2. LightOJ - 1322 - Worst Case Trie(DP)

    链接: https://vjudge.net/problem/LightOJ-1322 题意: In Computer Science Trie or prefix tree is a data st ...

  3. 进阶篇:5.1)极值法(Worst Case ,WC)

    本章目的:了解极值法,运用极值法: 1.极值法定义 极值法(WC,Worse Case):极值法是考虑零件尺寸最不利的情况,通过尺寸链中尺寸的最大值或最小值来计算关键尺寸的值: 计算公式: 2.极值法 ...

  4. AtCoder Regular Contest 094 D Worst Case【思维题】

    https://arc094.contest.atcoder.jp/tasks/arc094_b 题意: 在2次超多人的比赛中,你取得的成绩依次为第A名和第B名.一个人的成绩为a和b时,当且仅当ab& ...

  5. 算法最坏,平均和最佳情况(Worst, Average and Best Cases)-------geeksforgeeks 翻译

    最坏,平均和最佳运行时间(Worst, Average and Best Cases) 在上一篇文章中,我们讨论到了渐进分析可以解决分析算法的问题,那么在这一篇中,我们用线性搜索来举例说明一下如何用渐 ...

  6. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)

    作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...

  7. [LeetCode] Guess Number Higher or Lower II 猜数字大小之二

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  8. Linux CGroup之freezer分析与应用

    Linux Kernel:4.4.17 CGroup的freezer子系统对于成批作业管理系统很有用,可以成批启动/停止任务,以达到及其资源的调度. freezer子系统也有助于针对运行一组任务设置检 ...

  9. Uva 11732 strcmp() Anyone?

    strcmp() Anyone? Time Limit: 2000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Subm ...

随机推荐

  1. 安全通信协议SSH应用与分析

    一.实验简介: 本次实验属于安全协议应用与分析系列 二 实验环境: Windows server 2003 server windows xp 做client 三.实验目的 通过该实验了解SSH服务器 ...

  2. 洛谷4475 巧克力王国(KD-Tree + 维护子树和)

    (嘤嘤嘤 又是一个自闭了一晚上的题) qwq果然不是平面上的点的问题,也可以直接用KDTree打暴力 我们对于巧克力直接建kdtree 维护一个\(mx[i],mn[i]\) 但是有一个非常不友好的事 ...

  3. Java(12)方法的重载

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201592.html 博客主页:https://www.cnblogs.com/testero ...

  4. 关于keras框架的介绍以及操作使用

    Keras 是一个 Python 深度学习框架,可以方便地定义和训练几乎所有类型的深度学习模型.Keras 最开始是为研究人员开发的,其目的在于快速实验.我们可以进入网站主页 - Keras 中文文档 ...

  5. vue3.x新特性之setup函数,看完就会用了

    最近有小伙伴跟我聊起setup函数,因为习惯了vue2.x的写法导致了,setup用起来觉得奇奇怪怪的,在一些api混编的情况下,代码变得更加混乱了,个人觉得在工程化思想比较强的团队中使用setup确 ...

  6. Java:Object对象小记

    Java:Object对象小记 对 Java 中的 Object 对象,做一个微不足道的小小小小记 Object 的常用方法有哪些 clone() 方法:用于创建并返回当前对象的一份拷贝: 在Java ...

  7. pyinstaller和wordcloud和jieba的使用案列

    一.pyinstaller库 1.简介 pyinstaller库:将脚本程序转变为可执行(.exe)格式的第三方库 注意:需要在.py文件所在目录进行以下命令,图标扩展名是.ico 2.格式: pyi ...

  8. C++学习笔记之pimpl用法详解

    原文链接:https://www.jb51.net/article/122557.htm 在编写稳定代码是,管理好代码间的依赖性是不可缺少的一个环节.特别是库文件的编写中,减少代码间的依赖性可以提供一 ...

  9. Vulnhub实战-dr4g0n b4ll靶机👻

    Vulnhub实战-dr4g0n b4ll靶机 地址:http://www.vulnhub.com/entry/dr4g0n-b4ll-1,646/ 描述:这篇其实没有什么新奇的技巧,用到的提权方式就 ...

  10. triangle leetcode C++

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...