首页 > 其他分享 >【杂题乱写】6 月多校分治专题训练

【杂题乱写】6 月多校分治专题训练

时间:2023-07-02 15:35:59浏览次数:56  
标签:fir 乱写 多校 mid int sec l1 杂题 mx

A Gym-101471D Money for nothing

就是求 \((d_j-c_i)(q_j-p_i)\) 的最大值。

可以看作点对 \((d_j,q_j)\) 与 \((c_i,p_i)\) 在二维平面上构成矩形的最大值,且 \(c_i\ge d_j,p_i\ge q_j\)。

把卖家点对放在序列 \(a\),买家点对放在序列 \(b\),先删去一定不优的点,删完之后 \(a,b\) 都是单调递减的。

画图发现如果 \(b_2\) 在 \(a_1\) 处优于 \(b_1\),那么也一定在 \(a_2\) 处优于 \(b_1\),这样就有决策单调性了,分治即可。

点击查看代码
int m,n;
pii a[maxn],b[maxn];
int tota,totb;
ll ans=-llinf;
void solve(int l1,int r1,int l2,int r2){
    if(l1>r1) return;
    ll mx=-llinf;
    if(l1==r1){
        for(int i=l2;i<=r2;++i){
            if(b[i].fir>=a[l1].fir&&b[i].sec>=a[l1].sec){
                mx=max(mx,1ll*(b[i].fir-a[l1].fir)*(b[i].sec-a[l1].sec));
            }
        }
        ans=max(ans,mx);
        return;
    }
    int mid=(l1+r1)>>1,x=0;
    if(b[l2].sec<=a[mid].sec) return solve(mid+1,r1,l2,r2);
    for(int i=l2;i<=r2&&b[i].sec>a[mid].sec;++i){
        if(1ll*(b[i].fir-a[mid].fir)*(b[i].sec-a[mid].sec)>=mx){
            mx=1ll*(b[i].fir-a[mid].fir)*(b[i].sec-a[mid].sec),x=i;
        }
    }
    ans=max(ans,mx);
    solve(l1,mid-1,l2,x),solve(mid+1,r1,x,r2);
}

int main(){
    m=read(),n=read();
    for(int i=1;i<=m;++i) a[i].sec=read(),a[i].fir=read();
    for(int i=1;i<=n;++i) b[i].sec=read(),b[i].fir=read();
    sort(a+1,a+m+1,[&](pii &X,pii &Y){
        if(X.fir==Y.fir) return X.sec<Y.sec;
        else return X.fir<Y.fir;
    });
    sort(b+1,b+n+1,[&](pii &X,pii &Y){
        if(X.fir==Y.fir) return X.sec>Y.sec;
        else return X.fir>Y.fir;
    });
    int mx=-inf,mn=inf;
    for(int i=1;i<=m;++i){
        if(mn<a[i].sec) continue;
        a[++tota]=a[i];
        mn=a[i].sec; 
    }
    for(int i=1;i<=n;++i){
        if(mx>b[i].sec) continue;
        b[++totb]=b[i];
        mx=b[i].sec;
    }
    m=tota,n=totb;
    sort(b+1,b+n+1,[&](pii &X,pii &Y){
        return X.fir<Y.fir;
    });
    solve(1,m,1,n);
    ans=max(ans,0ll);
    printf("%lld\n",ans);
    return 0;
}

标签:fir,乱写,多校,mid,int,sec,l1,杂题,mx
From: https://www.cnblogs.com/SoyTony/p/Multiple_School_Divide_and_Conquer_Training_Problems_in_

相关文章

  • 【杂题乱写】6 月多校分治专题训练
    AGym-101471DMoneyfornothing就是求\((d_j-c_i)(q_j-p_i)\)的最大值。可以看作点对\((d_j,q_j)\)与\((c_i,p_i)\)在二维平面上构成矩形的最大值,且\(c_i\ged_j,p_i\geq_j\)。把卖家点对放在序列\(a\),买家点对放在序列\(b\),先删去一定不优的点,删完之后\(a,b\)都......
  • 7月CF杂题
    怎么七月了?六月的只写了一道题捏。EducationalCodeforcesRound151(RatedforDiv.2)俺寻思能行。D.RatingSystem为什么大家都切那么快捏。显然\(k\)一定是\(a\)数组的一个前缀和。假设\(k=\sum\limits_{i=1}^xa_i\),剩下的等价于处理初值为0且\(k=0\)的子问......
  • Coloring Tree (牛客多校) (BFS序列妙用+ f(n)-f(n+1)+ 组合数学)
    题目大意:给一个树,然后有k种颜色可以给树上色权值是2个相同颜色节点的最短距离问让权值为D的方案数 题解:首先要让2个节点为D,怎么处理呢?利用f(D)-f(D+1)即可因为问的是2个相同颜色点的最短距离,因此直接bfs用一个bfs序列然后在bfs一下,因为之前co......
  • Distance to Work (牛客多校) (圆和简单多边形相交面积 + 二分半径)
    #include<bits/stdc++.h>usingnamespacestd;constdoubleeps=1e-9;//浮点数精度控制#defineVectorpoint#definePointpointconstdoublePI=acos(-1);structPoint{doublex,y;Point(doublex=0,doubley=0):x(x),y(y){}friendVe......
  • Shuffle Cards (牛客多校) (rope 块状链表 用作可持续优化平衡树, 用于区间的整体移动
    rope:#include<ext/rope>usingnamespace__gnu_cxx; 定义方法:rope<变量类型>变量名称;人话解释:超级string算法解释:块状链表(即讲链表与数组的优势结合,形成分块思想)用途解释:这本来是一个用于快速操作string的工具,却一般被定义成int,然后用作可持久化线段树!insert(intpos,s......
  • PACM Team (牛客多校) (DP 01背包, 维度较多)
    题目大意:给出n个物品,物品有4个空间值,然后有一个权值问在不超过最大的空间值时,最大的权值  思路:一开始想了很多其他思路没有想出来开始广搜算法,发现dp可以解决(注意看数据范围,是满足的)遇到奇怪的题,就试试dp,特别在数据范围很小的时候 ......
  • 6月AT杂题
    AtCoderBeginnerContest307G-ApproximateEqualization好蠢的G,但居然是*2330。显然所有数一定是\(x,x+1\)之一。因为操作不会让整个数列的和发生变化,所以我们可以求出\(x,x+1\)的具体值以及出现个数。定义\(f_{i,j}\)表示前\(i\)个数中有\(j\)个\(x+1\),因为......
  • 【考后总结】6 月多校国赛模拟赛 6
    6.27冲刺国赛模拟25T1简单计数不是古典概型所以不能方案数相除。考虑枚举第一个选择的位置\(i\),这样分成两个独立的区间,只关心\(k\)所在的一个,转移方程:\[f_{n,k}=\dfrac{1}{n-1}\left([k<n]+[k>1]+\sum_{i>k}f_{i-1,k}+\sum_{i<k-1}f_{n-(i+1),k-(i+1)}\right)\]前缀和......
  • 【考后总结】6 月西安多校国赛模拟赛 3
    6.17冲刺国赛模拟20T1树染色容易发现每种方案都可以变成没有交边的链剖分,在此基础上的方案数是每个链顶的深度,考虑DP。直接DP大致是维护\(\prod(\proda+\prodb)\timesdep_{top}\),发现这个东西非常不好转移,转移时需要枚举叶子,复杂度不优秀。改为设\(f_{i,0/1}\)表......
  • 【考后总结】6 月西安多校国赛模拟赛 4
    6.21冲刺国赛模拟22T1跳跃不妨看作两只青蛙从相同起点出发且跳跃次数相同,设\(f_{i,j,k}\)为两只青蛙分别在\(i,j\)位置,且相差步数\(k\)。由于需要记录相邻位置对答案贡献,我们在要求必须严格按照升序对处理状态,也就是必须保证当前跳跃的一只青蛙落点在另一只青蛙更前面,且......