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. CodeForces - 999C

    You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly ...

  2. G6踩坑日记

    用G6去完成一整个图例的时候,当包裹它的容器满足不了包裹的需求时,我们就需要引入缩略图来解决问题了 缩略图使用方式很简单 引入插件配置就可以了 当我们使用多张图片进行绘图(G6支持使用图片进行构图,原 ...

  3. Callback2.0

    Callback定义? a callback is a piece of executable code that is passed as an argument to other code, wh ...

  4. ARP投毒攻击

    原理:通过分别伪装成客户机和服务器IP,将自己的MAC地址绑定在IP上,ARP错误的将IP解析为中间人MAC地址,从而来欺骗服务器网关和客户机,使信息必须通过客户机.

  5. powerpc平台移植zebra或quagga-0.99.23

    1,先configure  ./configure   --enable-vtysh --disable-bgpd --disable-ripd --disable-ripngd --disable- ...

  6. 15个你不得不知道的Chrome dev tools的小技巧

    转载自:https://www.imooc.com/article/2559 谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chro ...

  7. C++——stoi函数

    版权声明:本文系原创,转载请声明出处. 1. 函数原型 , ); , ); 2. 参数说明 str String object with the representation of an integr ...

  8. [ python ] 正则表达式及re模块

    正则表达式 正则表达式描述: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来    表达对字符串的一种过滤 ...

  9. Java显式锁学习总结之三:AbstractQueuedSynchronizer的实现原理

    概述 上一篇我们讲了AQS的使用,这一篇讲AQS的内部实现原理. 我们前面介绍了,AQS使用一个int变量state表示同步状态,使用一个隐式的FIFO同步队列(隐式队列就是并没有声明这样一个队列,只 ...

  10. LightOJ - 1010 Knights in Chessboard(规律)

    题目链接:https://vjudge.net/contest/28079#problem/B 题目大意:给你一个nxm的棋盘,问你最多可以放几个骑士让他们互相攻击不到.骑士攻击方式如下图: 解题思路 ...