CF1945F Kirill and Mushrooms

news/2024/9/19 8:04:45/文章来源:https://www.cnblogs.com/Oistream/p/18401503

题意

营地里的人一睡着,基里尔就偷偷溜出帐篷,去智者橡树那里采蘑菇。

众所周知,橡树下生长着 \(n\) 种蘑菇,每种蘑菇都有 \(v_i\) 的魔力。基里尔非常想用这些蘑菇制作一种魔力最大的灵药。

灵药的强度等于其中蘑菇的数量与这些蘑菇中最小魔力的乘积。为了配制灵药,基里尔将依次采摘生长在橡树下的蘑菇。基里尔可以按照任何顺序采集蘑菇。

然而,事情并非如此简单。智慧橡树告诉基里尔从 \(1\)\(n\) 的数字 \(p\) 的排列组合。如果基里尔只采摘 \(k\) 蘑菇,那么所有指数为 \(p_1, p_2, \dots, p_{k - 1}\) 的蘑菇的魔力就会变成 \(0\) 。基里尔不会使用魔力为零的蘑菇来配制灵药。

你的任务是帮助基里尔采集蘑菇,使他能够酿造出最大魔力的灵药。不过,基里尔有点害怕在橡树附近逗留太久,所以在所有适合采集蘑菇的选项中,他要求您找到蘑菇数量最少的那个。

长度为 \(n\) 的排列是由 \(n\) 个不同的整数组成的数组,这些整数的顺序从 \(1\)\(n\) 。例如, \([2,3,1,5,4]\) 是一个排列,但 \([1,2,2]\) 不是排列( \(2\) 在数组中出现两次), \([1,3,4]\) 也不是排列( \(n=3\) ,但 \(4\) 在数组中出现)。

思路

考虑枚举摘 \(k\) 个蘑菇,然后就可以获得哪些蘑菇会归 \(0\) , 则答案贪心的想即选前 \(k\) 个蘑菇
则最小值为当前序列第 \(k\)

支持修改且可以动态维护第 \(k\) 大的显然是权值线段树

代码

#include<bits/stdc++.h>
using namespace std;
const int N=4e5+5;
int a[N];
int b[N];
int v[N];
struct node
{int l,r;int sum;
}tr[N<<2];
void pushup(int id){tr[id].sum=tr[id<<1].sum+tr[id<<1|1].sum;}
void build(int id,int l,int r)
{tr[id]={l,r};if(l==r){return;}int mid=(l+r)/2;build(id<<1,l,mid);build(id<<1|1,mid+1,r);
}
void change(int id,int x,int v)
{if(tr[id].l==tr[id].r){tr[id].sum+=v;return;}int mid=(tr[id].l+tr[id].r)/2;if(x<=mid) change(id<<1,x,v);else change(id<<1|1,x,v);pushup(id);
}
int find(int id,int k)
{if(tr[id].l==tr[id].r){return tr[id].l;}if(k<=tr[id<<1|1].sum) return find(id<<1|1,k);else return find(id<<1,k-tr[id<<1|1].sum);
}
int main()
{int _;cin>>_;while(_--){int n;cin>>n;for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);int m=unique(b+1,b+1+n)-b-1;build(1,1,m);for(int i=1;i<=n;i++){a[i]=lower_bound(b+1,b+1+m,a[i])-b;change(1,a[i],1);}for(int i=1;i<=n;i++){scanf("%d",&v[i]);}long long ans=b[m];int id=1;for(int i=2;i<=n;i++){if(n-i+1<i) break;change(1,a[v[i-1]],-1);long long cnt=1LL*b[find(1,i)]*i;if(cnt>ans){ans=cnt;id=i;}}cout<<ans<<" "<<id<<"\n";}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我发布了一款相亲平台《i相遇》

因缘际会之下,我踏入了相亲平台的领域。起初,是为一位客户打造专属相亲应用,过程中深入体验了众多同类平台,却遗憾地发现它们普遍掺杂着欺诈的阴影——高昂的费用、兼职托儿的身影、以及虚假的钓鱼信息,不一而足。 完成客户项目后,我决定自己运营一款专为互联网人量身打造…

Linux系统安装ansiblle环境

前言:这里是生产环境红帽系统,如果是别的系统,本地源的配置方法不一样。 一、主节点服务器Redhat8 配置使用阿里源: 备份:sudo /etc/yum.repos.d/CentOS-Base.repo /opt/yum/ 下载新的CentOS-Base.repo 到 /etc/yum.repos.d/ (这里用的CentOS 8.0) 命令:sudo wget -O /…

1.hadoop入门

Hadoop入门一.概念1.hadoop是什么 (1)Hadoop是一个由apache基金会所开发的分布式系统基础架构(2)主要解决,海量数据的存储和海量数据的分析计算问题(3)广义上来说,hadoop通常是指一个更广泛的概念--hadoop生态圈2.Hadoop发展历史(1)创始人Doug Cutting,为了实现与Google类似的全…

JQuery的DOM操作

JQuery基础教程第四版第五章:DOM操作方法的简单归纳 使用JQuery的DOM操作实现以下功能1.创建新元素2.插入新元素3.移动元素4.包装元素5.复制元素 相关代码 HTML文件<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"&g…

C++顺序结构(1)

1、C++程序的样子2、流 输出流 COUT<<3、一个实例及解析 // 001 程序的基本结构 //单行注释 /*多行注释 被注释过的内容不会被运行,可以用来做笔记。 基本结构: 1.头文件 程序包含某个头文件后,程序中的代码就可以使用这个头文件里的功能。 2.命名空间 3.主函数 类…

manim边学边做--角度标记

manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记。 对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样; 对于直角,角度标记是一个垂直的拐角。 manim中关于角度标记的模型主要有3个:Angle:根据两条直线绘制角度标记 RightAng…

关于Tailscale Subnet routers要说的

国内的水文很多,Tailscale的部署就不说了。简单的都有讲到,但凡深度一点儿的只能找找外边儿的文章了。 昨天刚给群晖装完Tailscale,打算着利用Subnet routers功能来访问另外的2个子网。 国内的水文在介绍这一段使用的时候是这样的:该文章提到:如果有多个网段添加,就多运行…

CASIA-OLHWDB1.0-1.2数据集解析

OLHWDB1.0-1.2提供联机手写单字数据。 OLHWDB1.0收录汉字3866个,字母数字及符号171个。其中,GB2312-80一级集(共3755个字符)收录汉字3740个。 OLHWDB1.1收录GB2312-80一级集汉字3755个,字母数字及符号171个。 OLHWDB1.2收录汉字3319个,字母数字及符号171个。OLHWDB1.2的汉…

枚举测试

/*** 枚举类*/ public enum SocialTypeEnum {FACEBOOK(1),//脸书GITEE(2),//GITEEWECHAT_ENTERPRISE(3);//企业微信 <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">final</span> <span style=&…

ROS话题通信

# 发布方 # 以发布订阅的方式实现不同节点之间数据交互的通讯模式,用于不断更新的、少逻辑处理的数据传输场景 impoosyt rospy from std_msgs.msg import String# 初始化ROS节点(命门) rospy.init_node("talker_1") # 实例化发布者对象 pub_1 = rospy.Publisher(&…

(14)DDS基本原理与FPGA实现

基本概念 DDS(Direct Digital Synthesizer),即数字合成器,是一种把一系列数字信号通过D/A转换器转化成模拟信号的数字合成技术 DDS的实现有两种方式:查表法和计算法,下面将主要介绍DDS查表法的FPGA实现 查表法:预先在ROM中存放不同相位对应的幅度序列,通过相位累加器的…

入门指南 | Datavines 安装部署篇

摘要:本文主要介绍基于源码部署 Datavines 和执行检查作业,内容主要分为以下几个部分:平台介绍 快速部署 运行数据质量检查作业Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡…