最近做题小结

news/2024/10/23 11:01:54

https://www.luogu.com.cn/problem/AT_abc373_e

这道题是个二分 然后标答是两个二分 我用的树组+二分
需要对代数式进行拆分才能得到
我一开始看错题目了 看成大于等于他的票的人不多于M就行
然后就很简单 我觉得可以改编下这个题

很明显 最终前m个人一定当选

那么对于每一个人 我们就是尽量求他能不能利用最后的票让自己当选
求这个票的最小值

那我们先进行排序 从小到大排好

对于已经排前M的人来说 我们把他给抹掉 然后让m+1的人变成m位
此时我们对他进行二分判断最小 因为虽然我已经排前m了 但是
票数多太多的情况下 还是会被反超

对于这个抹掉可以写一个change函数 然后 后面再加上去就行

难就难在这个树状树组的写法上

现在分情况讨论 如果我已经前m位了 现在我删掉自己
二分了一个 ans可以进前m位的第2假设m为5 此时 假设多的票数总共是sum
sum-ans要让3 4 5 不可以反超 则有后面的总和加上sum-ans小于等于3*(ans+ai)这样就可以做到了

说白了就是后面的所有票数要小于人数*(ai+ans+1)

不能等于

这种求和用树组是log操作 明显可以做 对于查找位置 可以
内置lowerbound upperbound进行查找

为了查多少名不是通过low upp 因为他们返回的是数值
所以必须开再一开一个树组进行访问

struct Tree{int tr[range];void modify(int x,int d){int dex=lower_bound(num+1,num+1+cnt,x)-num;//位置 xxfor(int i=dex;i<=cnt;i+=i&-i){tr[i]+=d;}
//		for(int i=dex;i<=cnt;i+=i&-i)
//		{
//			cout<<tr[i]<<" "<<i<<" "<<x<<" "<<dex<<endl;
//		}}int  query(int x){int res=0;int dex=upper_bound(num+1,num+1+cnt,x)-num-1;
//		cout<<dex;
//		for(int i=dex;i>=0;i-=i&-i)for(int i=dex;i;i-=i&-i){res+=tr[i];}	
//		cout<<"res:"<<res<<endl;return res;}	
}t1,t2;

挺不容易的

考虑建树 只需要 枚举前m位

k=k-sum;sort(num+1,num+1+cnt);cnt=unique(num+1,num+1+cnt)-num-1;sort(a+1,a+1+n,cmp);
//离散 for(int i=1;i<=m;i++){t1.modify(a[i].x,a[i].x);t2.modify(a[i].x,1);}

后面删除:

if(i<=m){t1.modify(a[i].x,-a[i].x);t2.modify(a[i].x,-1);t1.modify(a[m+1].x,a[m+1].x);t2.modify(a[m+1].x,1);	}		

这题就这样了 难!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

前端ai工具v0使用配置

资料 ai工具Vo Installation - Tailwind CSS 以vue3 + sass为例,配置如下 安装tailwindcss npm install -D tailwindcss npx tailwindcss init安装依赖(可选) npm install lucide-vue-next更新 tailwind.config.js /** @type {import(tailwindcss).Config} */ module.export…

ERP开源项目Odoo

Odoo Odoo 的全称是 On Demand Open Object。名称反映了 Odoo 的起源和核心理念: •On Demand:代表 Odoo 作为一个按需使用的系统,可以根据企业的需要定制和部署各种模块。 •Open Object:强调 Odoo 是一个开源项目,允许用户访问和修改其源代码,以便根据具体业务需求进行…

2024.10.23 鲜花

基础数据结构进阶恋ひ恋ふ縁 诚、意地の悪い神の所业か? 奇迹?縁?袂触合う不思议 花ひとひら揺れて 不意に宿ってた うなじ解いてく春风 戯れはそこそこに 恋手ほどきしてくだしゃんせ 汤気にほんのり頬染て 夜风に愿ふ …いざ!!蝶と舞ひ花となりて 衣を乱して祓いましょう…

CMDB平台(进阶篇):企业级CMDB的高阶教程

企业IT架构日益复杂,配置项数量庞大且关系错综复杂。为了有效管理这些配置项,确保IT服务的稳定性和可靠性,配置管理数据库(Configuration Management Database,简称CMDB)系统应运而生。本文将深入探讨企业搭建CMDB系统所需具备的要素,以及实践路径,旨在为企业提供有益的…

U 盘

目录1 USB 大容量存储设备2 设备描述符3 字符串描述符4 配置描述符集合4.1 配置描述符4.2 接口描述符4.3 端点描述符6 类特殊请求6.1 Get Max LUN 请求6.2 Bulk-Only Mass Storage Reset 请求7 Bulk-Only 传输协议的数据流模型7.1 CBW 的结构7.2 CSW 的结构7.3 对批量数据的处理…

manim边做边学--复数平面

所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部。 每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法、乘法等运算可以通过直观的图形变换来理解。 ComplexPlane是Manim库中用于处理复数平面的类。 它不仅提供了…

3185. 构成整天的下标对数目 II

给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。 示例 1:…