一、题面

样例输入:

5 4
3 10 5 2 7
10
5 1 4 8 7 2 3 6 4 7

样例输出:

4 0
1 1
3 6
5 1
5 1
2 0
3 2
4 4
3 6
5 1

二、思路

关键词:线段树

这道题最难就难在看题吧。。。也许ACM的魅力之一便在于此——面对若干道题,你不知每一道题的难度是高是低,只能耐心地读清题面,审清题意,理清思路,方可知其是否在能力范围内以及预估耗时。考试过程中,我基本靠board来判断题目难度,清北大佬们先AC了哪些我就先做哪些。。。然而这道题似乎他们也不太愿意读题?其实际难度我觉得可能还要低于其他几道更早被A的题目。

题目大意是:现每个月提供m个灯泡,每次选出第一个小于当前灯泡数的房间,更换好该房间的灯泡,直至不存在这样的房间,则进入下个月。给出若干次月份数,求这几个月内能更换多少个房间的灯泡,以及剩余灯泡数。注意:当所有房间更换完之后,将不再提供灯泡!

n <= 10 ^ 5, d[p] <= 10 ^ 5,暴搜不可行。题目核心无非是求最早出现的小于k的数,可以用线段树维护每一段的最小值,再进行单点修改。水的一批。

三、代码

 #include <cstdio>
#define MAXN 100005
#define INF 0x3f3f3f3f int n, m, T, a[MAXN], x, t[MAXN << ], k, l[MAXN], r[MAXN], q, mx, tot; int max(int a, int b) {
return a > b ? a : b;
} int min(int a, int b) {
return a < b ? a : b;
} void build(int o, int l, int r) {
if (l == r) {
scanf("%d", &x), t[o] = x;
return;
}
int m = (l + r) >> ;
build(o << , l, m), build(o << | , m + , r);
t[o] = min(t[o << ], t[o << | ]);
} int query(int o, int l, int r) {
if (l == r) return l;
int m = (l + r) >> ;
if (t[o] > k) return ;
return t[o << ] <= k ? query(o << , l, m) : query(o << | , m + , r);
} void upd(int o, int l, int r) {
if (l == r) {
k -= t[o], t[o] = INF;
return;
}
int m = (l + r) >> ;
if (q <= m) upd(o << , l, m);
else upd(o << | , m + , r);
t[o] = min(t[o << ], t[o << | ]);
} void work() {
for (int i = ; i <= mx; i++) {
if (tot != n) {
k += m;
while (q = query(, , n)) upd(, , n), tot++;
}
l[i] = k, r[i] = tot;
}
} int main() {
scanf("%d %d", &n, &m);
build(, , n);
scanf("%d", &T);
for (int i = ; i <= T; i++) scanf("%d", &a[i]), mx = max(a[i], mx);
work();
for (int i = ; i <= T; i++) printf("%d %d\n", r[a[i]], l[a[i]]);
return ;
}

[ACM][2018南京预赛]Lpl and Energy-saving Lamps的更多相关文章

  1. [ACM][2018南京预赛]Sum

    一.题面 样例输入: 2 5 8 样例输出: 8 14 二.思路 关键词:线性筛 在Zed的帮助下知道了这是一道线性筛的比较裸的题了.考试过程中肝这道题的时间最久,费了心思找到递推式后,发现根本不是在 ...

  2. [ACM][2018南京预赛]Magical Girl Haze

    一.题面 样例输入: 15 6 11 2 21 3 42 4 33 4 13 5 64 5 2 样例输出: 3 二.思路 关键词:分层BFS 考试时觉得题干意思很清晰——求可将k条边赋值为0的最短路. ...

  3. 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)

    G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K   During tea-drinking, princess, amongst other t ...

  4. ACM-ICPC 2018 南京赛区网络预赛 G. Lpl and Energy-saving Lamps(二分+线段树区间最小)

    During tea-drinking, princess, amongst other things, asked why has such a good-natured and cute Drag ...

  5. ACM-ICPC 2018 南京赛区网络预赛(12/12)

    ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem 计算\(\sum_{i=1}^{n-1}i\cdot i!(MOD\ n)\) \(\sum_{i ...

  6. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  7. ACM-ICPC 2018 南京赛区网络预赛 E题

    ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...

  8. ACM-ICPC 2018 南京赛区网络预赛B

    题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...

  9. 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)

    J. Sum 26.87% 1000ms 512000K   A square-free integer is an integer which is indivisible by any squar ...

随机推荐

  1. Qt-QML-电子罗盘

    使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ...

  2. CTF--zip伪加密

    刷题 一.BUGKU WEB 1. 变量1 知识点php两个$$是 可变变量,就是一个变量的变量名可以动态的设置和使用 $GLOBALS一个包含了全部变量的全局组合数组.变量的名字就是数组的键 < ...

  3. 使用GitLab创建项目

  4. Two Sum - 新手上路

    不是计算机相关专业毕业的,从来没用过leetcode,最近在学习数据结构和算法,用leetcode练练手. 新手上路,代码如有不妥之处,尽管指出来. 今天抽空做的第一个题:Two Sum(最简单的呃呃 ...

  5. python基础知识-04-字符串列表元组

    python其他知识目录 内存,cpu,硬盘,解释器 实时翻译 编译器 :一次性翻译python2,3 除法,2不能得小数,3能得小数 1.字符串操作 1.1字符串操作startswith start ...

  6. 从零开始的Python爬虫速成指南

    序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...

  7. python序列成员资格

    可以用做登录操作,判断用户名密码是否正确! 代码示例: database = [ ['], ['], ['], ['] ] username = input("UserName: " ...

  8. nginx gzip压缩配置

    gzip(GNU-ZIP)是一种压缩技术.经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会块得多.gzip 的压缩页面需要浏览器和服务器双方都支持,实际上就是服务 ...

  9. ionic 开发实例

    ionic 开发实例 一.ionic初始化项目 1:安装ionic npm install -g ionic 2:初始化项目框架 我们可以用命令创建一个应用程序,可以使用我们的一个现成的应用程序模板, ...

  10. 关于window.open弹出窗口被阻止的问题

    原文:http://blog.csdn.net/fanfanjin/article/details/6858168 在web编程过程中,经常会遇到一些页面需要弹出窗口,但是在服务器端用window.o ...