首页 > 其他分享 >CF1030F题解

CF1030F题解

时间:2023-08-09 09:00:56浏览次数:40  
标签:二分 CF1030F limits 题解 线段 sum

CF1030F 题解

传送门  更好的阅读体验


简化题意:有 $n$ 个小球,每个小球在位置 $a_i$,移动一格的代价是 $w_i$,有两种操作,一种是将 $w_x$ 改成 $y$,一种是查询 $\min\limits_{x=1}^n\{\sum\limits_{i=l}^rw_i\times (|a_x-a_i|+|x-i|)\}$。

思路


很好的线段树二分练手题。
对于每个询问,首先肯定要找到使得答案最小的 $x$。我们考虑当前的 $x$ 变成 $x+1$ 时答案的改变量,发现就是 $(a_{x+1}-a_x)\times(\sum\limits_{i=l}^xw_i-\sum\limits_{i=x+1}^rw_i)$,因此 $x$ 取到 $[l,r]$ 的带权中位数时最优,即最小的满足 $\sum\limits_{i=l}^x w_i\geqslant\sum\limits_{i=x+1}^rw_i$ 的 $x$。
于是就可以直接二分+线段树来找这个 $x$,这也是其他题解的做法,单次复杂度是 $O(\log^2n)$ 的。如果直接用线段树二分的话就是 $O(\log n)$ 的,感觉还是比较板的。
接下来计算答案比较简单,就不再赘述了。
贴一下线段树二分的代码。
struct Seg{
    ll t[N<<2];
    inline void upd(int rt){t[rt]=t[ls]+t[rs];}
    inline void modify(int rt,int l,int r,int x,int k){
        if(l==r){
            t[rt]=k;
            return;
        }
        if(x<=mid)modify(ls,l,mid,x,k);
        else modify(rs,mid+1,r,x,k);
        upd(rt);
    }
    inline ll query(int rt,int l,int r,int L,int R){
        if(L>R)return 0;
        if(L<=l&&r<=R)return t[rt];
        ll ans=0;
        if(L<=mid)ans=query(ls,l,mid,L,R);
        if(mid<R)ans+=query(rs,mid+1,r,L,R);
        return ans;
    }
    inline int query(int rt,int l,int r,int L,int R,ll sum,ll &cur){
        if(l==r){
            if(2ll*(t[rt]+cur)<sum){
                cur+=t[rt];
                return -1;
            }
            return l;
        }
        if(L<=l&&r<=R){
            if(2ll*(t[rt]+cur)<sum){
                cur+=t[rt];
                return -1;
            }
            if(2ll*(t[ls]+cur)>=sum)return query(ls,l,mid,L,R,sum,cur);
            cur+=t[ls];
            return query(rs,mid+1,r,L,R,sum,cur);
        }
        int ans=-1;
        if(L<=mid)ans=query(ls,l,mid,L,R,sum,cur);
        if(~ans)return ans;
        return query(rs,mid+1,r,L,R,sum,cur);
    }
}T;

标签:二分,CF1030F,limits,题解,线段,sum
From: https://www.cnblogs.com/Xttttr/p/17615939.html

相关文章

  • CF1239E 题解
    CF1239E给定\(2n\)个数,将其重排成\(2\timesn\)的矩阵,最小化:从\((1,1)\)走到\((2,n)\),只可向右下走的所有方案中,途径所有数的和的最大值。\(n\le25,|V|\le5\times10^4\)。考场上有个\(n\le10\)的包,分值高达\(40\)。注意到\(\binom{20}{10}\approx10^5\)可枚......
  • 2023年 8月7日普及组南外集训题解
    A国家集训队题解注意数据已经是有序的,我还搞了个排序,我是智障所以只需要将第5个人到第16个人的成绩都预设成300,再把前4个人的成绩都预设成0,再看有没有人能超过第4个人就行了ac代码#include<iostream>usingnamespacestd;constintN=20;inta[N],ans=4;intmain(......
  • 2023年百度之星程序设计竞赛初赛1题解
    每次出题都出其不意---->群友蓝桥国三ac一道题根据官方的视频题解整理依据难度的划分第五题:促销糖果 分析:从答案出发想吃K个糖果,必定有k个糖纸,考虑换购,则有一张糖纸是不可以换的(因为你必须至少要买一颗糖果)则换购的数量为(k-1)/减去换购的糖果则是买的糖果packageLi2209;i......
  • CodeForces CF1846G 题解
    CodeForcesCF1846G题解CodeForces题目链接洛谷题目链接标准答案是状压之后,转化成Dijkstra算法跑最短路。我这里提供一个不一样的思路。题意简述主人公得了病,有部分类型的症状。所有类型症状共有\(n\)种,用长为\(n\)的01串表示是否有那种症状。共有\(m\)种药,吃......
  • 【BZOJ 3364】Distance Queries 距离咨询 题解
    原题简化题意:有一棵\(n\)个点的树,\(q\)组询问,每次询问回答两点间的距离。令\(dis[i][j]\)表示\(i\)到\(j\)的距离,根节点为\(rt\),则有\(dis[i][j]=dis[rt][i]+dis[rt][j]-2×dis[rt][lca(i,j)]\),按照题意打即可。#include<bits/stdc++.h>usingnamespacestd;#d......
  • Edge Drop传输缓慢的问题解决
    首先在移动端上传一张图片1.图片上传失败上传失败就没得救,网络真的不好,或者微软的服务器暂时被迫挂了。2.图片上传成功网页就会弹出消息......
  • RTSP流媒体服务器LntonNVR(源码版)视频平台通过级联到上级云服务器但视频无法播放的问题
    在经过多次的测试后,官方发布的版本可以正常级联。在实际使用过程中,有用户反馈LntonNVR通过国标GB28181协议级联到上级云服务器平台后,出现了上级平台无法播放的问题,需要我们技术人员协助进行排查。从上图我们可以看出,用户的云服务器平台显示是正常的,但是实际点击播放却存在一些问题......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台大量通道接入后,创建角色接口不响应的问题
    国标GB28181协议视频平台LntonGBS是基于国标GB28181协议的视频云服务平台,支持多路设备同时接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级联等功能,在视频能力上,GB2818......
  • 国标GB28181视频平台LntonGBS(源码版)国标视频平台内存错误导致崩溃的问题解决方案
    LntonGBS国标视频云服务通过支持国标GB28181协议,实现了设备接入、实时监控直播、录像、语音对讲、云存储、告警、级联等功能。同时,它还支持将接入的视频流以多种格式(包括RTSP、RTMP、FLV、HLS、WebRTC)进行全终端、全平台分发,实现了无插件播放在Web浏览器、手机浏览器、微信端、PC客......
  • Make Equal 题解
    MakeEqual题目大意给出\(n\)个数字\(a_1,a_2,a_3,......,a_n\),每次操作可以给其中一个数加上\(2\)的非负整数次幂。求最少的操作次数,使得这\(n\)个数相等。思路模拟赛看到这道题然后直接打的暴力拿了40分。暴力思路就是你需要找到一个大于等于\(a_{max}\)的\(m\)......