题目链接

\(Description\)

选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大。

\(Solution\)

先把物品按s排序就可以直接判断后一项。

我们发现当要判断的区间的长度\(\leq m\)时,区间内的所有数都要选(后一项都确定了)。

当区间长度\(>m\)时,自然是选\(v\)最大的\(m\)个。可以用链表把\(v\)最小的逐个删去。

发现删掉\(x\)的话我们只需要用\(x\)附近\(m\)个数更新答案。因为如果区间更大,也是会在删掉更多数的时候更新答案。

复杂度\(O(nm)\)。

//3226ms	4692kb
#include <cstdio>
#include <cctype>
#include <algorithm>
#define fir first
#define val second
#define mp std::make_pair
#define pr std::pair<int,int>
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=2e5+5; int n,m,ds,dv;
LL Ans;
pr A[N];
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
bool cmp(int a,int b){
return A[a].val<A[b].val;
}
inline void Update(LL sv,LL ss)
{
if(ds) ss*=ss; if(dv) sv*=sv;
Ans=std::max(Ans,sv-ss);
}
void Solve1()
{
for(int i=1; i<=n; ++i)
for(int j=i,sum=0,si=A[i].fir,lim=std::min(i+m-1,n); j<=lim; ++j)
sum+=A[j].val, Update(sum,A[j].fir-si);
}
void Solve2()
{
static int id[N],L[N],R[N];
R[0]=1, L[n+1]=n;
for(int i=1; i<=n; ++i) id[i]=i,L[i]=i-1,R[i]=i+1;
std::sort(id+1,id+1+n,cmp);
for(int i=1,x,l,r,t; i<=n; ++i)
{
x=id[i], l=L[x], r=R[x], t=m-1;
int sum=A[x].val;
for(; t&&l; --t,l=L[l]) sum+=A[l].val;
for(; t&&r<=n; --t,r=R[r]) sum+=A[r].val;
if(t) break;//长度<=m
l=R[l], r=L[r];
while(l<=x&&r<=n)//维护一个长m的**包含x**的区间
Update(sum,A[r].fir-A[l].fir), sum+=A[r=R[r]].val-A[l].val, l=R[l];
L[R[x]]=L[x], R[L[x]]=R[x];//为了方便还是先更新再删吧 后面的如果不更新它的答案就不会影响它的区间
}
} int main()
{
n=read(),m=read(),ds=read()-1,dv=read()-1;
for(int i=1,t; i<=n; ++i) t=read(),A[i]=mp(t,read());
std::sort(A+1,A+1+n);
Solve1(), Solve2(), printf("%lld\n",Ans); return 0;
}

UOJ.386.[UNR #3]鸽子固定器(贪心 链表)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. uoj【UNR #3】To Do Tree 【贪心】

    题目链接 uojUNR3B 题解 如果不输出方案,是有一个经典的三分做法的 但是要输出方案也是可以贪心的 设\(d[i]\)为\(i\)节点到最深的儿子的距离 贪心选择\(d[i]\)大的即可 #in ...

  7. uoj386 【UNR #3】鸽子固定器

    link (似乎很久没写题解了) 题意: n个物品,每个物品有a,b两个值,给定A,B,现在最多选其中m个,要求最大化选出的物品中[b权值和的B次方-a极差的A次方]. $n\leq 2\times ...

  8. [BZOJ 1150] [CTSC2007] 数据备份Backup 【贪心 + 链表】

    题目链接:BZOJ - 1150 题目分析 可以看出,我们选的 k 条边一定是相邻两点之间的线段.我们可以将每条边看成一个点,那么我们就是要在 n-1 个点中选出互不相邻的 k 个,使它们的和最小. ...

  9. A Magic Lamp(贪心+链表)

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

随机推荐

  1. 20181103 Nginx(布尔教育)

    nginx介绍 对标Apache服务器 目录介绍 conf 配置文件 html 网页文件 logs 日志文件 sbin 主要二进制程序 控制命令 ./nginx # 启动 nginx -t # 测试配 ...

  2. Python远程连接模块-Telnet

    Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...

  3. python---补充django中文报错(2),Django3.5出错

    今天是要Django3.5设置项目,结果出现中文报错,虽然之前分析过py2.7的报错原因,但是在py3之后reload不在使用,需要引入: from importlib import reload 但 ...

  4. python3中__get__,__getattr__,__getattribute__的区别

    __get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的 ...

  5. Linux学习6-套接字

    套接字 1.什么是套接字? 套接字(socket)是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 2.套接字应用程序是如何通过套接字来维持一个连接的 ...

  6. 315道Python面试题答案

    目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...

  7. 【ARTS】01_01_左耳听风-20181112~1116

    每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorithm.Review.Tip.Share 简称A ...

  8. Kth Smallest Number in Sorted Matrix

    Find the kth smallest number in at row and column sorted matrix. Example Given k = 4 and a matrix: [ ...

  9. C#中的GetElementsByClassName方法

    2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24     public static class Spread     {    ...

  10. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器&开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...