bzoj2457 双端队列
虽然分类在数据结构里,但是实际上是个贪心题......
我自己一开始想到了一个错误的贪心。后来发现对于相等值的处理不行。
有个很神的转化,就是把排好序的队列以及对应的原下标都给搞出来。
然后考虑其中一段:若这一段属于同一个双端队列,那么原下标一定呈单谷状。
相等的值如何处理呢?因为相等的值可以任意在排序后的序列里交换位置,所以我们可以任意设计它们的原下标而达到单谷状态来为我们所用。
所以特判一下就好了。时间O(nlogn),因为有排序。
(惨痛的教训:把 == 写成了 = )
/**************************************************************
Problem: 2457
Language: C++
Result: Accepted
Time:452 ms
Memory:3948 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
const int N = ; struct Number {
int val, num, num_up;
bool del;
bool operator < (const Number &x) const {
if(val != x.val) {
return val < x.val;
}
return num < x.num;
}
}num[N]; int main() {
//freopen("in.in", "r", stdin);
//freopen("my.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d", &num[i].val);
num[i].num = num[i].num_up = i;
}
std::sort(num + , num + n + ); int t = ;
for(int i = ; i <= n; i++) { /// 去重
if(num[i].val == num[t].val) {
num[t].num_up = num[i].num;
num[i].del = ;
}
else {
t = i;
}
} int now = num[].num;
int k = ;/// 1 up 2 down
int ans = ; for(int i = ; i <= n; i++) {
if(num[i].del) {
continue;
}
if(num[i].num == num[i].num_up) {
bool f = num[i].num < now;
if(k == ) { /// up
if(f) {
ans++;
k = ;
}
}
else { /// k == 2 down
if(!f) {
k = ;
}
}
now = num[i].num;
}
else { /// 多个
if(k == ) { /// up
if(num[i].num > now) {
now = num[i].num_up;
}
else if(num[i].num_up < now) {
ans++;
k = ;
now = num[i].num;
}
else { /// 中间
ans++;
k = ;
now = num[i].num;
}
}
else { /// down
if(num[i].num > now) {
k = ;
now = num[i].num_up;
}
else if(num[i].num_up < now) {
now = num[i].num;
}
else { /// 中间
k = ;
now = num[i].num_up;
}
}
}
//printf("%d %d %d %d\n", num[i].val, ans, k, now);
}
printf("%d", ans);
return ;
}
AC代码
bzoj2457 双端队列的更多相关文章
- BZOJ2457 双端队列 题解
本题直接求解十分困难,因为在不知道整个序列的数字规律时当前所作决策都无法保证最优性. 考虑正难则反,题目转化为将一个非降序列分成尽量少的几段,让每段对应原问题的双端队列. 先将原数组排序,由于原数组下 ...
- 【BZOJ2457】[BeiJing2011]双端队列 贪心+模拟
[BZOJ2457][BeiJing2011]双端队列 Description Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若 ...
- BZOJ2457 BeiJing2011 双端队列
[问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...
- [BZOJ2457][BeiJing2011]双端队列 (单调性)
正如lyd所说,和数据结构本身没什么太大关联 题意 中文题面 Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. ...
- BZOJ2457 [BeiJing2011]双端队列 【贪心】
题目 Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事: 1.新建一个双端队列 ...
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
随机推荐
- Mysql DBA 运维 MySQL数据库索引优化及数据丢失案例 MySQL备份-增量备份及数据恢复基础实战 MySQL数据库生产场景核心优化
需要的联系我,QQ:1844912514
- C# Note33: 总结C# 6.0/7.0 新特性
先注明,本文主体参考自:C# 6.0新特性 目前代码中使用了很多C#6.0的新特性,下面以Point类来做相关叙述: public class Point { public int X { get; ...
- python之路--MySQL权限管理 数据备份还原
一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...
- mysql 清除大数据表单
背景:mysql数据库中有个日志表记录高达800多万,影响了mysql的正常业务访问,现需要清理三个月之前的所有数据,大概600多万(大概13G) 方法一:传统delete from xxx,传统,普 ...
- JAVA 变量 数据类型 运算符 知识小结
---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...
- <resultMap>中 <collection>的使用
public class Question implements Serializable { private int id; //问题Id private int accountId; //用户id ...
- How to enable mp3 on Ubuntu
apt install gstreamer1.0 libavcodec57
- python 项目目录结构
目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构.在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论. 这里面说的已经很好了, ...
- web scraper——简单的爬取数据【二】
web scraper——安装[一] 在上文中我们已经安装好了web scraper现在我们来进行简单的爬取,就来爬取百度的实时热点吧. http://top.baidu.com/buzz?b=1&a ...
- 安卓Android基础第五天
使用HttpUrlConnection方式提交到服务器2 Get方式:组拼url地址把数据组拼到url上,有大小限制1kb(浏览器)或4kb(http协议) Post方式:post方式提交安全,没有大 ...