营业额统计
时间:2019-09-18
本文章向大家介绍营业额统计,主要包括营业额统计使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
思路
代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#define min(a, b) ((a) < (b) ? a : b)
const int MAX = (1<<15) + 5;
int n, m, tot, rt, inf = 0x3f3f3f3f;
long long ans;
struct Node {
int lc, rc, cnt, size, key, pri;
#define lc(x) t[x].lc
#define rc(x) t[x].rc
#define cnt(x) t[x].cnt
#define size(x) t[x].size
#define key(x) t[x].key
#define pri(x) t[x].pri
} t[MAX];
void update(int &r) { size(r) = size(lc(r)) + size(rc(r)) + cnt(r); }
void zig(int &r) {
int s = lc(r);
lc(r) = rc(s);
rc(s) = r;
size(s) = size(r);
update(r);
r = s;
}
void zag(int &r) {
int s = rc(r);
rc(r) = lc(s);
lc(s) = r;
size(s) = size(r);
update(r);
r = s;
}
void insert(int &r, int k) {
if (!r) {
r = ++tot;
cnt(r) = size(r) = 1;
pri(r) = rand(), key(r) = k;
return;
} else ++size(r);
if (k == key(r)) ++cnt(r);
else if(k < key(r)) {
insert(lc(r), k);
if (pri(lc(r)) < pri(r)) zig(r);
} else {
insert(rc(r), k);
if (pri(rc(r)) < pri(r)) zag(r);
}
}
void delt(int &r, int k) {
if (k == key(r)) {
if (cnt(r) >= 2) cnt(r)--, size(r)--;
else if (!lc(r) || !rc(r)) r = lc(r) + rc(r);
else if (pri(lc(r)) < pri(r)) zag(r), delt(r, k);
else zig(r), delt(r, k);
return;
}
if (k < key(r)) delt(lc(r), k);
else delt(rc(r), k);
}
int queryPre(int k) {
int r = rt, res = inf;
while (r) {
if (key(r) <= k) res = key(r), r = rc(r);
else r = lc(r);
}
return res;
}
int queryNxt(int k) {
int r = rt, res = inf;
while (r) {
if (key(r) > k) res = key(r), r = lc(r);
else r = rc(r);
}
return res;
}
int queryKth(int k) {
int r = rt, res = inf;
while (r) {
if (size(lc(r)) < k && size(lc(r)) + cnt(r) >= k) return key(r);
else if (size(lc(r)) >= k) r = lc(r);
else k -= size(lc(r)) + cnt(r), r = rc(r);
}
return res;
}
int queryRand(int k) {
int r = rt, res = 0;
while (r) {
if (k == key(r)) return size(lc(r)) + cnt(r) + 1;
else if (k < key(r)) r = lc(r);
else res += size(lc(r)) + cnt(r), r = rc(r);
}
return res;
}
inline int read() {
int s = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9') {
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * f;
}
void write(long long x) {
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
int main() {
srand(time(NULL));
n = read(), m = read();
ans = m;
insert(rt, m);
for (int i = 2, j; i <= n; ++i) {
j = read();
int a = queryPre(j), b = queryNxt(j);
// printf("pre:%d nxt:%d ", a, b);
ans += min(abs(j - a), b - j);
// printf("ans: %d\n", ans);
insert(rt, j);
}
write(ans);
return 0;
}
原文地址:https://www.cnblogs.com/liuzz-20180701/p/11543754.html
- 能让程序做的事情坚决不用人来做——批量修复markdownlint MD034警告
- swift demo1 tableview
- Swift Alamofire
- 给Ocelot做一个Docker 镜像
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
- 第二届ZCTF逆向题分析(一)
- 渗透测试时,需要注意浏览器选项
- 渗透测试时,需要注意浏览器选项
- 码云 Android apk 在线构建功能上线啦
- addslashes防注入的绕过案例(AFSRC获奖白帽子情痴)
- Hive表字段Comment中文乱码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Vue写个首页,原来这么简单
- 5分钟内搭建你的第一个Python聊天机器人
- dotnet 获取进程命令行参数的工具
- SpringFramework之ViewResolver优化
- 搭建maven私服上传并使用Jar包
- Prometheus监控Minio集群
- Spring Boot 相关漏洞学习资料
- 口令爆破之突破前端JS加密
- 渗透测试之API测试技巧
- PC(C/S架构)客户端测试笔记
- 手把手教你使用Python开发飞机大战小游戏,4万字超详细讲解!
- Android通过URL文件下载及文件名提取
- PyTorch4:模块总览&torch.utils.data
- express处理文件上传
- 《机器学习》-- 第七章 朴素贝叶斯