bzoj 2457 [BeiJing2011]双端队列 模拟+贪心
[BeiJing2011]双端队列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 457 Solved: 203
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
3
6
0
9
6
3
Sample Output
HINT
100%的数据中N≤200000。
题解:第一思路很重要:我们将原序列中的所有数排序,然后从小到大一个个扔回原序列中。根据贪心的思想,我们一定是先连续扔一些个,再将这几个放到一个队列中,再连续的扔一些个。。。并且我们每一次扔的数一定是越多越好。
那么我们只需要知道每次扔进去的数需要满足什么条件即可。根据题意,如果令pi表示第i大的数的位置,那么每次扔进去的pi一定是先递减再递增的。所以我们将所有相同的数合并,得到每个数出现的最左边和最右边的位置,然后模拟一发就行了。
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue> #define N 200007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,tag,pre,ans;
int p[N],v[N],sm[N],sn[N]; bool cmp(int a,int b)
{
return (v[a]==v[b])?(a<b):(v[a]<v[b]);
}
int main()
{
n=read();
for(int i=;i<=n;i++)
v[i]=read(),p[i]=i;v[]=-;
sort(p+,p+n+,cmp);
for(int i=;i<=n;i++)
{
if(v[p[i]]!=v[p[i-]]) m++,sm[m]=sn[m]=p[i];
sm[m]=max(sm[m],p[i]),sn[m]=min(sn[m],p[i]);
}
for(int i=;i<=m;i++)
{
if(i==||(tag&&sn[i]<pre)) ans++,tag=,pre=sn[i];
else if(!tag&&sm[i]>pre) tag=,pre=sm[i];
else if(!tag&&sm[i]<pre) pre=sn[i];
else if(tag&&sn[i]>pre) pre=sm[i];
}
printf("%d",ans);
}
bzoj 2457 [BeiJing2011]双端队列 模拟+贪心的更多相关文章
- 【贪心】Bzoj 2457:[BeiJing2011]双端队列
2457: [BeiJing2011]双端队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 209 Solved: 95[Submit][Stat ...
- BZOJ 2457 [BeiJing2011] 双端队列
2457: [BeiJing2011]双端队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 340 Solved: 167[Submit][Sta ...
- 2457: [BeiJing2011]双端队列
2457: [BeiJing2011]双端队列 链接 很奇妙的转化. 题目要求最后的所有序列也是有序的,所以可以求出最后的序列(即排序后的序列),然后分成许多份,要求每一份都是一个双端序列,求最少分成 ...
- BZOJ2457 [BeiJing2011]双端队列 【贪心】
题目 Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事: 1.新建一个双端队列 ...
- 【BZOJ 2457】 双端队列
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2457 [算法] 贪心 [代码] #include<bits/stdc++.h& ...
- 【BZOJ2457】[BeiJing2011]双端队列 贪心+模拟
[BZOJ2457][BeiJing2011]双端队列 Description Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若 ...
- BZOJ2457 BeiJing2011 双端队列
[问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- UVa 210 Concurrency Simulator (双端队列+模拟)
题意:给定n个程序,每种程序有五种操作,分别为 var = constant(赋值),print var (打印), lock, unlock,end. 变量用小写字母表示,初始化为0,为程序所公有( ...
随机推荐
- (python)leetcode刷题笔记04 Median of Two Sorted Arrays
4. Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m and n respectiv ...
- Mount qcow2 image
1.Mount a qcow2 image qemu-nbd - QEMU Disk Network Block Device Server: Export QEMU disk image using ...
- 20162328蔡文琛week09
学号 2016-2017-2 <程序设计与数据结构>第X周学习总结 教材学习内容总结 数据库是为了其他程序提供数据的应用软件. 关系书就哭通过唯一的标识符在不同表的记录见建立了关系. JD ...
- http-bio-8080"-exec-6"(转)
现象如下: Tomcat7启动后,后台抛出如下异常,前台一直无法登陆Exception in thread ""http-bio-8080"-exec-6" j ...
- Ubuntu 配置 Android 开发 环境
. 果断换Ubuntu了, Ubuntu的截图效果不好, 不能设置阴影 ... 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article ...
- Microsoft.Practices.EnterpriseLibrary
项目中使用了Microsoft.Practices.EnterpriseLibrary这个东西,根据名字猜测和微软有关系(可以翻译为:微软实践企业库). 看到了引入了两个命名空间: using Mic ...
- TCP系列29—窗口管理&流控—3、Nagle算法
一.Nagle算法概述 之前我们介绍过,有一些交互式应用会传递大量的小包(称呼为tinygrams),这些小包的负载可能只有几个bytes,但是TCP和IP的基本头就有40bytes,如果大量传递这种 ...
- Qt应用程序图标
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt应用程序图标 本文地址:http://techieliang.com/2017/1 ...
- QWidget一生,从创建到销毁事件流
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QWidget一生,从创建到销毁事件流 本文地址:http://techieliang ...
- js实现倒计时60秒的简单代码
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...