biubiu~~~

这道题,考场上上来就dp然后发现怎么优化也不行.............最后发现是贪心.............

正解:带反悔的贪心,原理是,假设我们现在得到了取i个的最优解那么我们取i+1个的时候要么是新取一个要么把原来取过的点取反(间隙与所选)。我们把所有点从大到小选,这个过程用堆维护,一开始所有的点都是可选的,那么我们取了一个点他前一个后一个都不能再选,那么我们把它们都从堆里取出来,记录答案,同时放进去一个新点,是由这三个点融合的,值为val[i-1]+val[i+1]-val[i]为取反的价值,然后一直取最大取k次就可以了。为什么可以呢:对于一个先取出来的点他左右两点都还没有被取到,因此他如果后来不选了当且仅当同时选其两边的点;这样的话我们满足每次都是在取当前次数下的最大值,这样我们堆里的点的形态大概都是 1 1 1 101 10101 1010101 1 1 1 (1表示没选,0表示选了)。

巨坑:不要错选两边的点,我们只要选了边上的点那么他一定不会被改掉,我们就把他设为inf就当做死人算了,至于为什么会错选呢:我们要选了两边的点,那么我们就会用他的值减去他里面的点的值,然后放进去,我们考虑一下我们就算是选的把点取反那也是选的点数+1的,那我们刚才那个操作是什么鬼?我们要是这么搞就有可能出现以减少所选的点的个数来换取价值的情况。

STL:对于multiset我们删除find到的指针只会删除一个然而我们find到的是我们找到的第一个数。

#pragma G++ optimize("O3")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <set>
#define MAXN 100010
inline void read(long long &sum){
register char ch=getchar();
for(sum=;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=(sum<<)+(sum<<)+ch-'',ch=getchar());
}
struct Via{
long long val;
long long l,r;
inline friend bool operator < (Via a,Via b){
return a.val!=b.val?a.val>b.val:a.r<b.r;
}
}p[MAXN];
std::set<Via> Set;
long long n,k;
long long ans;
int main(){
read(n),read(k);
for(long long i=,a;i<=n;i++){
read(a);
p[i]=(Via){a,i,i};
Set.insert(p[i]);
}
while(k--){
Via x=*Set.begin();
Set.erase(Set.find(x));
long long l=x.l,r=x.r,val=-x.val;
ans+=x.val;
if(x.l!=)
Set.erase(Set.find(p[x.l-])),val+=p[x.l-].val,l=p[x.l-].l;
else val-=0x7f7f7f7f;
if(x.r!=n)
Set.erase(Set.find(p[x.r+])),val+=p[x.r+].val,r=p[x.r+].r;
else val-=0x7f7f7f7f;
x.l=l,x.r=r,x.val=val;
for(long long i=l;i<=r;i++)p[i]=x;
Set.insert(x);
}
printf("%lld",ans);
}

【NOIP模拟赛】就 反悔贪心的更多相关文章

  1. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  2. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  3. 2016-06-19 NOIP模拟赛

          2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...

  4. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  5. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  8. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  9. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  10. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

随机推荐

  1. pyspider -- 禁止请求非200响应码抛异常

    在pyspider中若crawl()网址时出现非200的异常信息,会抛出一个异常. 可以在对应的回调函数上面通过@catch_status_code_error 进行修饰,这样就能不抛出异常正常进入回 ...

  2. mysql 时间相关sql , 按天、月、季度、年等条件进行查询

    #今天 select * from or_order_task where to_days(created_date)=to_days(now()); #近七天 select * day )<= ...

  3. R语言学习笔记(十六):构建分割点函数

    选取预测概率的分割点 cutoff<- function(n,p){ pp<-1 i<-0 while (pp>=0.02) { model.predfu<-rep(&q ...

  4. R语言学习笔记(十三):零碎知识点(36-40)

    36--diag() 如果它的参数是一个矩阵,它返回的是一个向量 如果它的参数是一个向量,它返回的是一个向量 如果它的参数是一个标量,它返回的是指定大小的单位矩阵 > diag(2) [,1] ...

  5. PHP.40-TP框架商城应用实例-后台15-商品属性与库存量1-不同商品(唯一属性、可选属性),属性类型

    思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L……;颜色:白色,黑色……}唯一属性:材质 首 ...

  6. HI2115软件开发板V150版本AT+NSOST指令

    1. 在HI2115里面,由于内存空间比较大,所以支持UDP发送指令AT+NSOST的分包 ret = sendto(socket, seq_num, data_string, length, msg ...

  7. FPGA数字鉴相鉴频器的开发记录

    1. 对于电机的锁相控制,需要对相差进行PI性质的环路滤波,但现有的锁相环中鉴频鉴相器输出为相差脉冲而非数字量,难以直接进行PI特性的环路滤波. 通过对晶振的非整数分频获取准确的参考时钟,基于触发器机 ...

  8. Python简要标准库(3)

    shelve 若只需要一个简单的存储方案,那么shelve模块可以满足你大部分的需要,你所需要的只是为它提供文件名.shelve中唯一有趣的函数是open,在调用的时候他会返回一个Shelf对象 注意 ...

  9. python 网络编程(socketserver,阻塞,其他方法)

    重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...

  10. 机器学习性能指标精确率、召回率、F1值、ROC、PRC与AUC--周振洋

    机器学习性能指标精确率.召回率.F1值.ROC.PRC与AUC 精确率.召回率.F1.AUC和ROC曲线都是评价模型好坏的指标,那么它们之间有什么不同,又有什么联系呢.下面让我们分别来看一下这几个指标 ...