题面

洛谷

题解





勘误:新的休息点a需要满足的条件2为那一部分小于等于ans

代码

\(100pts\)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 5e5 + 5;
int N, M, a[MAX_N], sum[MAX_N], cnt[MAX_N];
struct Node { int l, r, v; } Line[MAX_N << 1]; int tot = 0;
struct deque {
int head, tail, len;
deque() { head = tail = len = 0; }
bool empty() { return !len; }
int newNode(int l, int r, int v) { Line[++tot] = (Node){ l, r, v }; return tot; }
int front() { return Line[head].v; }
int back() { return Line[tail].v; }
void pop_back() { tail = Line[tail].l, len--; }
void pop_front() { head = Line[head].r, len--; }
void push_back(int v) {
if (!len) head = tail = newNode(0, 0, v);
else Line[tail].r = newNode(tail, 0, v), tail = Line[tail].r;
len++;
}
void push(int v) {
while (len && a[back()] > a[v]) pop_back();
push_back(v);
}
} Q[MAX_N << 1], Qu[MAX_N << 1], *q = Q + MAX_N, *qu = Qu + MAX_N;
#define min(x, y) ((a[x]) < (a[y]) ? (x) : (y))
int main() {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
N = gi(), M = gi();
for (int i = 1; i <= N; i++) a[i] = gi(), sum[i] = gi(), sum[i] = sum[i] ? 1 : -1;
for (int i = N - 1; i >= 1; i--) sum[i] += sum[i + 1];
for (int i = N; i >= 1; i--) cnt[i] = cnt[i + 1] + (!sum[i]);
int S = sum[1], d = S ? (abs(S) - 1) / M + 1 : cnt[1] < M;
cnt[N + 1] = -1;
if (!d) {
for (int i = 1, j = 2; i < M; i++) {
for (; cnt[j + 1] >= M - i; j++) if (!sum[j + 1]) q[0].push(j);
printf("%d ", a[q[0].front()]);
q[0].pop_front();
}
} else {
for (int i = 2; i <= N; i++) qu[sum[i]].push_back(i - 1);
int lst = 0;
a[N + 1] = N + 1;
for (int i = 1; i < M; i++) {
int ans = N + 1;
for (int j = sum[lst + 1] - d; j <= sum[lst + 1] + d; j++) {
if (ceil(1.0 * abs(j) / (M - i)) > d) continue;
for (; !qu[j].empty() && N - qu[j].front() >= M - i; qu[j].pop_front())
if (qu[j].front() > lst) q[j].push(qu[j].front());
for (; !q[j].empty() && q[j].front() <= lst; q[j].pop_front()) ;
if (!q[j].empty()) ans = min(ans, q[j].front());
}
lst = ans, printf("%d ", a[ans]);
}
}
printf("%d\n", a[N]);
return 0;
}

【LG3229】[HNOI2013]旅行的更多相关文章

  1. 3141: [Hnoi2013]旅行 - BZOJ

    Description Input 第一行为两个空格隔开的正整数n, m,表示旅行的城市数与旅行所花的月数.接下来n行,其中第 i行包含两个空格隔开的整数Ai和Bi,Ai表示他第i个去的城市编号.Bi ...

  2. bzoj3141: [Hnoi2013]旅行

    Description   Input 第 一行为两个空格隔开的正整数n, m,表示旅行的城市数与旅行所花的月数.接下来n行,其中第 i行包含两个空格隔开的整数Ai和Bi,Ai表示他第i个去的城市编号 ...

  3. HNOI2013旅行

    一道欺负我智商的题... 本来想打单调队列优化dp的,结果看到算法标签就点了此题 洛谷题面 首先你要理解题意,蒟蒻理解了好久.它就是说,给你一个由1和-1组成的数列,让你分成m段,并让这m段区间和最大 ...

  4. BZOJ3141:[HNOI2013]旅行

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.p ...

  5. [HNOI2013]题解

    代码在最后 [HNOI2013]比赛 记忆化搜索 把每一位还需要多少分用\(27\)进制压进\(long\) \(long\),\(map\)记忆化一下即可 [HNOI2013]消毒 先考虑在二维平面 ...

  6. Hnoi2013题解 bzoj3139~3144

    话说好久没写题(解)了.. 先贴份题解:http://wjmzbmr.com/archives/hnoi-2013-%E9%A2%98%E8%A7%A3/(LJ神题解..Lazycal表示看不懂..) ...

  7. # HNOI2012 ~ HNOI2018 题解

    HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】

    刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...

随机推荐

  1. ALICE源代码分析

    前言 ALICE(爱丽丝)事实上是"人工语言计算机实体"的英文缩写. 它以前在往年(2000年.2001年和2004年)的勒布纳人工智能奖角逐中三次获胜.并在其它年度中也获过骄人的 ...

  2. Linux环境变量及其设置

    简介 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息.Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环 ...

  3. linux mysql access denied for user ‘root’@’localhost'(using password:YES)

    linux安装完mysql后,使用程序连接报以上错误解决方法,重新设置密码,步骤如下 1.先停掉原来的服务 service mysqld stop 2.使用安全模式登陆,跳过密码验证 mysqld_s ...

  4. 框架 Hibernate

    Hibernate 在test01右键新建其他找到hibernate文件夹下的Hibernate Configuration File(cfg.xml) <?xml version=" ...

  5. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第二件事就是 LED 驱动 ,点个灯

    /* * board_led.c * * Created on: 2018年7月3日 * Author: admin */ #include "board_uart.h" #inc ...

  6. Vcenter虚拟化三部曲----VMWare ESXi 5.5安装及配置

    VMWare ESXi 5.5安装大概过程如下:制作虚拟化ESXi系统的USB启动盘,安装ESXi系统到USB,用USB启动ESXi系统.比较难理解,下面图解过程. 下载UNetbootin   (下 ...

  7. css 中的 initial inherit unset 意思

    写css时,在对属性进行选值,经常遇到unset , initial,inherit三个值.这几个值的含义. 1.inherit 可继承性 继承的意思. 每一个 CSS 属性都有一个特性就是,这个属性 ...

  8. java核心技术-多线程之基本使用

    多线程程序好处就是可以提高cpu使用率和系统的性能.这里举个例子,民以食为天,咱们以餐馆为例(后面基本上都用餐馆作为对象),后面如果没有特殊说明均采用本节相关术语,围绕餐馆我们可以抽象出如下几个角色以 ...

  9. 编译安装 Hue

    # 安装前的准备 useradd huedev wget https://github.com/cloudera/hue/archive/release-4.2.0.tar.gz -O /home/h ...

  10. #leetcode刷题之路19-删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1-& ...