link

(似乎很久没写题解了)

题意:

n个物品,每个物品有a,b两个值,给定A,B,现在最多选其中m个,要求最大化选出的物品中【b权值和的B次方-a极差的A次方】。

$n\leq 2\times 10^5,m\leq 50.$

花絮:

大概全场最早ac的两人是miaom&wzf2000,用了非标算的“神奇的做法”,太强辣。

题解:

按照a排序以后转化为选定一个区间以后最大化区间内部的b权值和。

然后考虑两种情况:

  • 如果区间长度小于等于m,那么一定是选择连续一段。
  • 否则,区间内部剩余没有选择的物品,它们的b权值一定比选择的都小,否则可以替换获得更优解。

第一种情况暴力,第二种用链表维护,从小到大删去数,那么每次选择的同样是连续一段。

时间复杂度$\mathcal{O}(nm)$。

code:

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define ll long long
#define inf 1000000001
#define y1 y1___
using namespace std;
ll read(){
char ch=getchar();ll x=;int op=;
for (;!isdigit(ch);ch=getchar()) if (ch=='-') op=-;
for (;isdigit(ch);ch=getchar()) x=(x<<)+(x<<)+ch-'';
return x*op;
}
#define N 300005
int n,m,A,B,id[N],l[N],r[N];ll ans,a1[N],a2[N],b1[N],b2[N];
struct node{
int a,b;
node(){}
node(int a_,int b_){a=a_,b=b_;}
}q[N];
bool cmp(node x,node y){return x.a<y.a;}
bool cmp2(int x,int y){return q[x].b<q[y].b||q[x].b==q[y].b&&x<y;}
void upd(ll x,ll y){
if (B==) x=x*x;if (A==) y=y*y;
ans=max(ans,x-y);
}
int main(){
// freopen("A.in","r",stdin);
// freopen("A.out","w",stdout);
n=read(),m=read(),A=read(),B=read();
rep (i,,n) q[i].a=read(),q[i].b=read(),id[i]=i,l[i]=i-,r[i]=i+;
q[]=node(,);q[n+]=node(inf,);
r[]=,l[n+]=n,l[]=,r[n+]=n+;
sort(&q[],&q[n+],cmp);
sort(&id[],&id[n+],cmp2);
rep (i,,n){//区间长度小于等于m
ll sum=;
for (int j=i;j<=n&&j<=i+m-;j++){
sum+=q[j].b;
upd(sum,q[j].a-q[i].a);
}
}
rep (i,,n){//区间长度大于m,从小到大删数
int x=id[i];
b1[]=q[x].b,b2[]=;a1[]=a2[]=q[x].a;
for (int j=,l_=l[x],r_=r[x];j<=m;j++){
b1[j]=b1[j-]+q[l_].b,b2[j]=b2[j-]+q[r_].b;
a1[j]=q[l_].a,a2[j]=q[r_].a;
l_=l[l_],r_=r[r_];
}
rep (j,,m-) upd(b1[j]+b2[m-j-],a2[m-j-]-a1[j]);
r[l[x]]=r[x],l[r[x]]=l[x];
}
cout<<ans<<'\n';
return ;
}

uoj386 【UNR #3】鸽子固定器的更多相关文章

  1. UOJ.386.[UNR #3]鸽子固定器(贪心 链表)

    题目链接 \(Description\) 选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大. \(Solution\) 先把物品 ...

  2. #386. 【UNR #3】鸽子固定器

    #386. [UNR #3]鸽子固定器 题目链接 官方题解 分析: 神奇的做法+链表. 首先按照大小排序. 对于小于选择小于m个物品的时候,这个m个物品一定是一段连续的区间.因为,如果中间空着一个物品 ...

  3. 【UOJ#386】【UNR#3】鸽子固定器(贪心)

    [UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...

  4. UOJ#386. 【UNR #3】鸽子固定器(链表)

    题意 题目链接 为了固定S**p*鸽鸽,whx和zzt来到鸽具商店选购鸽子固定器. 鸽具商店有 nn 个不同大小的固定器,现在可以选择至多 mm 个来固定S**p*鸽鸽.每个固定器有大小 sisi 和 ...

  5. 【UOJ386】【UNR #3】鸽子固定器 链表

    题目描述 有 \(n\) 个物品,每个物品有两个属性:权值 \(v\) 和大小 \(s\). 你要选出 \(m\) 个物品,使得你选出的物品的权值的和的 \(d_v\) 次方减掉大小的极差的 \(d_ ...

  6. uoj#386. 【UNR #3】鸽子固定器(乱搞)

    传送门 题解 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define fp(i ...

  7. [UOJ386]鸽子固定器

    题解 堆+贪心 题意就是给你\(n\)个物品,让你最多选\(m\)个 每个物品有两个属性\(a_i,b_i\) 最大化\((\sum_{a_i})^{dv}+(max(b_i)-min(b_i))^{ ...

  8. UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]

    地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...

  9. 经典灰鸽子lcx

    方法1路由配置 在路由器配置 进入虚拟服务器 填入ip 端口 就可以了方法2内网域名解析想以前的花生客 科迈都有这项免费业务但现在基本不提供了如果那个网站还有内网解析的功能 大家一定要发上来哦方法3p ...

随机推荐

  1. H5小游戏——看你有多色

    使用了封装了canvas的create.js库来实现的. 最终效果: 工程: Rect.js /* * 方块类 */ function Rect(n,color,specialColor){ crea ...

  2. ajax技术整理总结(1)

    1.创建ajax对象 var xhr=new XMLHttpRequest(); 4.监听状态信息 xhr.onreadystatechange=function(){ //4接收完毕 ){ docu ...

  3. TCP 传输控制协议(转)

    开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...

  4. arch优化开机

    查看开机时间 systemd-analyze 具体开机时间 systemd-analyze blame 你可以systemctl --all | grep not-found 查看有哪些服务挂掉了.然 ...

  5. HDFS RAID实现方案(转)

    原文链接:http://blog.chinaunix.net/uid-20196318-id-3213700.html 分布式文件系统主要用于解决海量数据存储的问题,如Goolge.Facebook等 ...

  6. LFM隐语义模型Latent Factor Model

    实际应用 LFM 模型在实际使用中有一个困难,就是很难实现实时推荐.经典的 LFM 模型每次训练都需要扫描所有的用户行为记录,并且需要在用户行为记录上反复迭代来优化参数,所以每次训练都很耗时,实际应用 ...

  7. Linux软件管理器(如何使用软件管理器来管理软件)

    我们的Linux系统大部分都是某个Linux厂商的系统,所以这些厂商可以编译好一些软件来提供用户下载,用户下载完了之后就可以直接安装,从而省去了编译源码及其过程中的各种问题.这时我们就可以使用相应的软 ...

  8. P1084 疫情控制

    Solution 二分答案, 尽量往上跳, 不能跳到根节点. 仍然能跳的拿出来.看剩下的点没有覆盖哪个? 贪心的分配一下. Code 70 #include<iostream> #incl ...

  9. hdu 5875(单调栈)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  10. 【ios开发之疑难杂症】xcode运行出现SpringBoard 无法启动应用程序(错误:7)

    问题:xcode运行出现SpringBoard 无法启动应用程序(错误:7) 解决方案: 重启模拟器