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. 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)

    题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...

  2. HDU 1394 Minimum Inversion Number (树状数组)

    题目链接 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the numb ...

  3. VueJS 集成 medium editor 自定义编辑器按钮

    详见我的新博客: 守望之吻

  4. discuz各个目录与文件的作用说明

    discuz下面有很多文件夹以及文件,你们都知道他们是做什么的么?肯定不知道了吧.但是我们有经常遇到这些文件,譬如在后台文件校验操作都遇到某些文件被修改,这时候也需要知道这些文件是有什么作用的.今天就 ...

  5. js日期工具

    /** * 日期工具类 */ define(function(require, exports, module) { var constants = require("constants&q ...

  6. 使用navicat for sqlserver 把excel中的数据导入到sqlserver数据库

    以前记得使用excel向mysql中导入过数据,今天使用excel向sqlserver2005导入了数据,在此把做法记录一下 第一步:准备excel数据,在这个excel中有3个sheet,每个she ...

  7. web deploy 安装失败解决

    单独运行安装包,提示脚本运行失败. VS安装提示解包失败. 解决:检查Windows Management Instrumentation服务状态.需要非禁用.

  8. 利用json模块解析dict报错找不到attribute 'dumps'[python2.7]

    [背景] 环境: RHEL 7.3 版本: python2.7 [错误情况] 写了一个简单的python脚本 将dict转换为json 脚本如下: #!/usr/bin/python #-*- cod ...

  9. CentOS_Linux服务器系统安装之分区

    在software selection中选择Server with GUI>(Compatibility Libraries.Development Tools和Security Tools) ...

  10. linux中$的各种含义

    我们先写一个简单的脚本,执行以后再解释各个变量的意义   # touch variable # vi variable   脚本内容如下:   #!/bin/sh echo "number: ...