「HNOI2002」营业额统计
「HNOI2002」营业额统计
传送门
这题比较板子吧应该。。。
有几个需要注意的地方:
- 第一次插入时就要贡献答案
- 在每次计算贡献时,注意分裂出来的子树是否为空,并且要对两边的相邻元素之差取 \(\min\)
参考代码:
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T & s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
const int _ = 1e5 + 5;
int n, ans, rt, tot, siz[_], val[_], pri[_], ch[2][_];
inline int Newnode(int v)
{ return siz[++tot] = 1, val[tot] = v, pri[tot] = rand(), tot; }
inline void pushup(int p) { siz[p] = siz[ch[0][p]] + siz[ch[1][p]] + 1; }
inline int merge(int x, int y) {
if (!x || !y) return x + y;
if (pri[x] > pri[y])
return ch[1][x] = merge(ch[1][x], y), pushup(x), x;
else
return ch[0][y] = merge(x, ch[0][y]), pushup(y), y;
}
inline void split(int p, int v, int& x, int& y) {
if (!p) { x = y = 0; return ; }
if (val[p] <= v)
return x = p, split(ch[1][p], v, ch[1][x], y), pushup(p);
else
return y = p, split(ch[0][p], v, x, ch[0][y]), pushup(p);
}
inline int kth(int p, int k) {
if (siz[ch[0][p]] + 1 > k) return kth(ch[0][p], k);
if (siz[ch[0][p]] + 1 == k) return val[p];
if (siz[ch[0][p]] + 1 < k) return kth(ch[1][p], k - siz[ch[0][p]] - 1);
}
int main() {
read(n), read(ans);
rt = merge(rt, Newnode(ans));
for (rg int x, a, b, i = 2; i <= n; ++i) {
read(x), split(rt, x, a, b);
int mn = 2147483647;
if (a != 0) mn = min(mn, x - kth(a, siz[a]));
if (b != 0) mn = min(mn, kth(b, 1) - x);
ans += mn, rt = merge(a, merge(Newnode(x), b));
}
printf("%d\n", ans);
return 0;
}
「HNOI2002」营业额统计的更多相关文章
- BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 给出每一天的营业值,求出之前的天当中与它相差最小的营业值与它的差的绝对值(第一天的差值为 ...
- 【HNOI2002】营业额统计
https://www.luogu.org/problem/show?pid=2234 用Treap维护,每次查询这个数的前驱与后继哪个和它差值更小. 由于查询一个数时在Treap走出的路径必定经过它 ...
- 「CH2101」可达性统计 解题报告
CH2101 可达性统计 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到 ...
- 「日志」Navicat统计的行数竟然和表实际行数不一致
背景 近期为了保障线上数据库的稳定性,我决定针对一些大表的历史数据有计划地进行备份迁移,但是呢,发现一个奇特的现象,Navicat统计行数和表自身count统计数竟然不一致!?0.0 Navicat ...
- LOJ #2183「SDOI2015」序列统计
有好多好玩的知识点 LOJ 题意:在集合中选$ n$个元素(可重复选)使得乘积模$ m$为$ x$,求方案数对$ 1004535809$取模 $ n<=10^9,m<=8000且是质数,集 ...
- 【LOJ】#2183. 「SDOI2015」序列统计
题解 这个乘积比较麻烦,转换成原根的指数乘法就相当于指数加和了,可以NTT优化 注意判掉0 代码 #include <bits/stdc++.h> #define fi first #de ...
- BZOJ1588: [HNOI2002]营业额统计[BST]
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14151 Solved: 5366[Submit][Sta ...
- BZOJ 1588: [HNOI2002]营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14396 Solved: 5521[Submit][Sta ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap
1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...
随机推荐
- Django框架之ORM的相关操作(一)
一.一般操作 from django.db import models import datetime # Create your models here. class Author(models.M ...
- MySQLroot密码的恢复方法
MySQLroot密码的恢复方法 有可能你的系统没有 safe_MySQLd 程序(比如我现在用的 ubuntu操作系统, apt-get安装的MySQL) , 下面方法可以恢复 1.停止MySQLd ...
- 【JavaWeb】Spring相关错误记录
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: ...
- centos610无桌面安装libreoffice
Centos610系列配置 #安装文件 yum -y install libreoffice #安装中文包 yum -y install libreoffice-langpack-zh-Han* #安 ...
- 类型不匹配 java.lang.IllegalArgumentException : argument type mismatch
异常: 解决: money的类型是 float类型(把0.8改成 0.8f 即可)
- python基础(三)---Python基础语法
1. 注释 1.1 单行注释 语法格式: #[空格]说明性文字信息 添加快捷键: Ctrl+/ 取消快捷键: Ctrl+/ 1.2 多行注释 语法格式: """说明性文字 ...
- Java 多线程学习笔记(一)
一.进程和线程 (1)进程概念的引入 为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念.---摘之计算机操作系统(第四版)汤小丹编著 (2)进程概念 进程(Pro ...
- node.js express 中文参考手册
https://www.runoob.com/w3cnote/express-4-x-api.html 原文地址:https://www.zybuluo.com/bajian/note/444152 ...
- python浅谈编程规范和软件开发目录规范的重要性
前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...
- redis几种数据导出导入方式
一.redis-dump方式 1.安装redis-dump工具 [root@172.20.0.3 ~]# yum install ruby rubygems ruby-devel -y 更改gem源 ...