【ZROI317】【18 提高 2】A (乱搞+凸包+决策单调性)

       这题其实并不怎么难,可是我现场没做出来QAQ,我还是太弱了,ORZ mjh,zyf dalao 们 tql!!!

       很显然,我们可以将 aix2+bix a i x 2 + b i x 除以一个 x x ,得到aix+bi,这时,要求 aix2+bix a i x 2 + b i x ,只需要在 x>0 x > 0 时求出最大的 aix+bi a i x + b i ,在 x<0 x < 0 时求出最小的 aix+bi a i x + b i ,在 x=0 x = 0 时输出 0 0 即可。

       这就转化成了给定一堆直线,求出在与直线x=?的交点的最高点或最低点。

       那怎么做呢?我们先考虑 x>0 x > 0 的情况:首先,对于 ai=aj a i = a j ,如果 bibj b i ≥ b j 就不用考虑 (aj,bj) ( a j , b j ) 了,这时我们会发现对于不同的 ai a i ,只有唯一的 bi b i 与之对应(即最大值)。然后呢?我们又会发现,对于一个 (ai,bi) ( a i , b i ) ,如果存在另一个 (aj,bj) ( a j , b j ) 使得 ajai a j ≥ a i bjbi b j ≥ b i ,那么也不用考虑 (ai,bi) ( a i , b i ) 了。最后,我们会发现,剩下来的直线中,对于 ai>aj a i > a j ,一定满足 bi<bj b i < b j 。我们按 ai a i 从大到小排序,那么 bi b i 递减。(由于数据范围很小, |ai|,|bi|,|x|32323 | a i | , | b i | , | x | ≤ 32323 ,所以直接桶排即可。)

       现在我们又能发现一个性质,在这个顺序下,随着询问 x x 的递增,带来最优解的直线的下标一定是单调不下降的(这也非常好证明,因为ai是递增的,随着 x x 的增大,肯定是越右边带来的贡献越可能大),然后我发现这个最优解的位置并不好求,答案的判断并不满足单调性,于是我场上就想到这,GG

       当时一直困扰我的是这种情况:

       会发现,当x>b1b2a2a1时, (a2,b2) ( a 2 , b 2 ) (a1,b1) ( a 1 , b 1 ) 更优,当 x>b2b3a3a2 x > b 2 − b 3 a 3 − a 2 时, (a3,b3) ( a 3 , b 3 ) (a2,b2) ( a 2 , b 2 ) 更优,但是由于 b2b3a3a2<b1b2a2a1 b 2 − b 3 a 3 − a 2 < b 1 − b 2 a 2 − a 1 ,所以直接统计答案并不满足任何单调性,那怎么做呢?我们会发现,当 x>b1b3a3a1 x > b 1 − b 3 a 3 − a 1 时, (a3,b3) ( a 3 , b 3 ) (a1,b1) ( a 1 , b 1 ) 更优,又因为 b1b3a3a1<b1b2a2a1 b 1 − b 3 a 3 − a 1 < b 1 − b 2 a 2 − a 1 ,所以 (a3,b3) ( a 3 , b 3 ) 先于 (a2,b2) ( a 2 , b 2 ) 变为可能的最优解,又因为前面证到最优解的下标随着 x x 的增加而不下降,所以(a2,b2)永远不可能成为最优解,可以直接舍去。再仔细观察,我们发现其实这也正是一个求解凸包的过程,所以由此能得出结论,最优解一定在上凸壳上,将 x x 代入上凸壳上的每条直线得到的是一个单峰函数,可以直接二分或者用单调性扫一遍(其实不用这个结论一样做QWQ)。这样x>0的情况就做完了。 x<0 x < 0 直接反着来即可。

       由于使用了桶排序,所以时间复杂度为 Θ(n+q+64647) Θ ( n + q + 64647 ) ,是线性的(实际上并没有跑多快QAQ)。

       蒟蒻的暂时是全oj最快的代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
const int base=32323;
inline void read(int &x)
{
    x=0;
    bool f=false;
    char ch=getchar();
    while(!isdigit(ch))f^=(ch=='-'),ch=getchar();
    while(isdigit(ch))x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    if(f)x=-x;
}
struct point{
    int x,y;
};
int n,q;
int a[500010],b[500010];
int qa[500010];
bool has[70010];
point p[70010];
int mx[70010];
bool ok[70010];
long long ans[70010];
inline int calc(int x,point t){return t.x*x+t.y;}
inline void getmax(int &x,int y){x=x<y?y:x;}
void work(int coef)
{
    for(int i=-base;i<=base;i++)mx[i+base]=-1e9;
    for(int i=1;i<=n;i++)getmax(mx[(coef>0?a[i]:-a[i])+base],(coef>0?b[i]:-b[i]));
    int tot=0;
    for(int i=-base;i<=base;i++)if(mx[i+base]>-1e9)p[++tot]=(point){i,mx[i+base]};
    int v=-1e9;
    if(coef>0)
    {
        for(int i=tot;i>=1;i--)
        {
            if(v>=p[i].y)ok[i]=false;
            else
            {
                ok[i]=true;
                v=p[i].y;
            }
        }
    }
    else
    {
        for(int i=1;i<=tot;i++)
        {
            if(v>=p[i].y)ok[i]=false;
            else
            {
                ok[i]=true;
                v=p[i].y;
            }
        }
    }
    int cnt=0;
    for(int i=1;i<=tot;i++)if(ok[i])p[++cnt]=p[i];
    int top=1;
    for(int i=2;i<=cnt;i++)
    {
        while(top>1 && 1LL*(p[i].x-p[top].x)*(p[top].y-p[top-1].y)<=1LL*(p[top].x-p[top-1].x)*(p[i].y-p[top].y))top--;
        p[++top]=p[i];
    }
    int pos=1;
    int l=coef>0?1:-base,r=coef>0?base:-1;
    for(int i=l;i<=r;i++)
    {
        if(!has[i+base])continue;
        while(pos<top && calc(i,p[pos+1])>=calc(i,p[pos]))pos++;
        ans[i+base]=1LL*calc(i,p[pos])*i*coef;
    }
}
int main()
{
    read(n);read(q);
    for(int i=1;i<=n;i++)read(a[i]),read(b[i]);
    for(int i=1;i<=q;i++)read(qa[i]),has[qa[i]+base]=true;
    work(1);
    work(-1);
    for(int i=1;i<=q;i++)printf("%lld\n",ans[qa[i]+base]);
    return 0;
} 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 伴随着人才教学的关注度越来越高,对于人才的培养也是当今社会发展的最为重要的问题之一。为了进一步的进行人才的培养关工作,许多的学校或者是教育的机构逐步的开展了网络信息化的教学和和管理工作,通过信息化的手段和技术实现网络信息化的教育及管理模式,通过网络信息化的手段实现在线答题在线考试和学生信息在线的管理等操作。这样更加的快捷解决了人才培养之中的问题,也在进一步的促进了网络信息化教学方式的快速的发展工作。相较于之前的人才教育和培养工作之中,存在这许多的问题和局限。在学生信息管理方面通过线下管理的形式进行学生信息的管理工作,在此过程之中存在着一定的局限和低效,往往一些突发的问题导致其中工作出现错误。导致相关的教育工作受到了一定的阻碍。在学生信息和学生成绩的管理方面,往常的教育模式之下都是采用的是人工线下的进行管理和整理工作,在这一过程之中存在这一定的不安全和低效,面对与学生基数的越来越大,学生的信息管理也在面领着巨大的挑战,管理人员面领着巨大的学生信息的信息量,运用之前的信息管理方式往往会在统计和登记上出现错误的情况的产生,为后续的管理工作造成了一定的困难。然而通过信息化的管理方式进行对学生信息的管理不仅可以避免这些错误情况的产生还可以进一步的简化学生信息管理工作的流程,节约了大量的人力和物力的之处。在线答题系统的实现不仅给学生的信息管理工作和在线考试带来了方便也进一步的促进了教育事业信息化的发展,从而实现高效化的教学工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值