2457: [BeiJing2011]双端队列

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 209  Solved: 95
[Submit][Status][Discuss]

Description

 
       Sherry现在碰到了一个棘手的问题,有N个整数需要排序。
       Sherry手头能用的工具就是若干个双端队列。
      
她需要依次处理这N个数,对于每个数,Sherry能做以下两件事:
1.新建一个双端队列,并将当前数作为这个队列中的唯一的数;
2.将当前数放入已有的队列的头之前或者尾之后。
 
对所有的数处理完成之后,Sherry将这些队列排序后就可以得到一个非降的序列。

Input

第一行包含一个整数N,表示整数的个数。接下来的N行每行包含一个整数Di,其中Di表示所需处理的整数。

Output

其中只包含一行,为Sherry最少需要的双端队列数。

Sample Input

6
3
6
0
9
6
3

Sample Output

2

HINT

100%的数据中N≤200000。


  先简化一拨题意。
  大约是说有这样多个双端队列用。
  然后队列有序。
  队列内元素有序。
  问最多几个能满足最后的序列有序。
  我们先排序一遍,按两个关键字,第二个关键字是数组位置从大到小。
  发现样例的位置序列如此:3 1 6 2 5 4
  
 
  仔细想一想
  队列里面的元素必须连续
  大约一个队列能处理一段的要求是pos 从大到小 然后到最低从小到最大。
  一个这样的折点大约就用一个队列
 
  当然还有特殊情况——相等的数。

  相等的数显然可以放在一个队列中....因为我可以控制其递增或递减,于是只需要记录最大值和最小值,然后当成一个整体就好。
  
  贪心+模拟的时候:
  
  

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> #define maxn 200100 using namespace std; struct node{
int x,pos;
}a[maxn]; int mx[maxn],mi[maxn]; inline int in()
{
int x=,f=;char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')f=-,ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-'',ch=getchar();
return x*f;
} bool cmp(const node A,const node B){return A.x<B.x||(A.x==B.x&&A.pos<B.pos);} int main()
{
int n,cnt=,ans=,h=,b=;
n=in();
for(int i=;i<=n;i++)a[i].x=in(),a[i].pos=i;
sort(+a,+a+n,cmp);
for(int i=;i<=n;i++)
if(i==||a[i].x!=a[i-].x)
{
mx[cnt]=a[i-].pos;
mi[++cnt]=a[i].pos;
}
mx[cnt]=a[n].pos;
for(int i=;i<=cnt;i++)
{
if(!b)
{
if(h>mx[i])h=mi[i];
else h=mx[i],b=;
}
else{
if(h<mi[i])h=mx[i];
else h=mi[i],b=,ans++;
}
}
printf("%d",ans);
return ;
}

【贪心】Bzoj 2457:[BeiJing2011]双端队列的更多相关文章

  1. BZOJ 2457 [BeiJing2011] 双端队列

    2457: [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 340  Solved: 167[Submit][Sta ...

  2. bzoj 2457 [BeiJing2011]双端队列 模拟+贪心

    [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 457  Solved: 203[Submit][Status][D ...

  3. 2457: [BeiJing2011]双端队列

    2457: [BeiJing2011]双端队列 链接 很奇妙的转化. 题目要求最后的所有序列也是有序的,所以可以求出最后的序列(即排序后的序列),然后分成许多份,要求每一份都是一个双端序列,求最少分成 ...

  4. 【BZOJ 2457】 双端队列

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2457 [算法] 贪心 [代码] #include<bits/stdc++.h& ...

  5. 【BZOJ2457】[BeiJing2011]双端队列 贪心+模拟

    [BZOJ2457][BeiJing2011]双端队列 Description        Sherry现在碰到了一个棘手的问题,有N个整数需要排序.        Sherry手头能用的工具就是若 ...

  6. BZOJ2457 [BeiJing2011]双端队列 【贪心】

    题目 Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事: 1.新建一个双端队列 ...

  7. BZOJ2457 BeiJing2011 双端队列

    [问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序.  Sherry手头能用的工具就是若干个双端队列.        她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...

  8. [BZOJ2457][BeiJing2011]双端队列 (单调性)

    正如lyd所说,和数据结构本身没什么太大关联 题意 中文题面   Sherry现在碰到了一个棘手的问题,有N个整数需要排序.        Sherry手头能用的工具就是若干个双端队列.        ...

  9. BZOJ 2457 双端队列(思维

    2457: [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 582  Solved: 253[Submit][Sta ...

随机推荐

  1. java开发命名规范(转载)

    java开发命名规范 使用前注意事项: 1.  由于Java面向对象编程的特性, 在命名时应尽量选择名词 2.  驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而 ...

  2. 将slider滑块从横着变为竖着的时候坐标变换的计算

    ////  ViewController.m//  imageview添加按钮////  Created by hehe on 15/9/22.//  Copyright (c) 2015年 wang ...

  3. SQL语句统计每天的数据

    按用户注册时间统计每天注册的不同来源.不同状态的用户数量: ), RegisterTime, ) RDate ,--DATEPART(YEAR, RegisterTime) 年 ) END 'AWai ...

  4. (转)Yale CAS + .net Client 实现 SSO(6)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 第六 ...

  5. Ajax乱码问题

    Ajax中文乱码问题   1.js代码 var userName=$("#userName").val(); var url = "user/login.action?u ...

  6. PHP 网站保存快捷方式的实现代码

    介绍下使用PHP实现网站快捷方式的保存方法. PHP怎么实现网站保存快捷方式呢?下面是一段PHP代码,下面这段代码,可以PHP实现网站保存快捷方式,以便用户随时浏览.  <?php  /** * ...

  7. Oracle 摘去数据块的面纱

    Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00018000h 6 A2 0 0 0c 0 80 3 8b 61 15 0 0 0 3 4 type frmt spa ...

  8. cadence PCB绘制步骤

    1 创建一个PCB文件  file -> new 2 创建一个板框  add -> line ,在 options 选型中选择好,板框为 长 4400mil 宽 3200 3 给PCB板框 ...

  9. Sybase ASE报错:server Error: 8242, Severity: 16, State: 1

    昨天上午,同事反映某系统在执行存储过程的过程中报错了,报错的信息异常如下: 05:00000:00009:2014/06/09 15:45:30.34 server Error: 8242, Seve ...

  10. 保持iOS上键盘出现时输入框不被覆盖

    如果屏幕中的内容项目比较多,键盘就可能覆盖住文本输入框之类的对象.你必须调整你的内容,使得输入框保持可见. 你会想到哪些处理方法呢? 第一种, 临时调整窗口中各个视图的大小,使得键盘从下向上占领的区域 ...