关键词:
[BZOJ1588][HNOI2002]营业额统计
试题描述
输入
第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。
输出
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。
输入示例
6 5 1 2 5 4 6
输出示例
12
数据规模及约定
n ≤ 50000
题解
简单的平衡树操作。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cctype> #include <algorithm> #include <cmath> using namespace std; int read() { int x = 0, f = 1; char c = getchar(); while(!isdigit(c)){ if(c == ‘-‘) f = -1; c = getchar(); } while(isdigit(c)){ x = x * 10 + c - ‘0‘; c = getchar(); } return x * f; } #define maxn 50010 #define oo 2147483647 struct Node { int v, r, minv, maxv; Node() {} Node(int _, int __): v(_), r(__) {} } ns[maxn]; int ToT, rt, ch[2][maxn], fa[maxn]; void maintain(int o) { ns[o].minv = ns[o].maxv = ns[o].v; for(int i = 0; i < 2; i++) if(ch[i][o]) ns[o].minv = min(ns[o].minv, ns[ch[i][o]].minv), ns[o].maxv = max(ns[o].maxv, ns[ch[i][o]].maxv); return ; } void rotate(int u) { int y = fa[u], z = fa[y], l = 0, r = 1; if(z) ch[ch[1][z]==y][z] = u; if(ch[1][y] == u) swap(l, r); fa[u] = z; fa[y] = u; fa[ch[r][u]] = y; ch[l][y] = ch[r][u]; ch[r][u] = y; maintain(y); maintain(u); return ; } void insert(int& o, int v) { if(!o) { ns[o = ++ToT] = Node(v, rand()); return maintain(o); } bool d = v > ns[o].v; insert(ch[d][o], v); fa[ch[d][o]] = o; if(ns[ch[d][o]].r > ns[o].r) { int t = ch[d][o]; rotate(t); o = t; } return maintain(o); } int fans; void Find(int o, int v) { if(!o) return ; if(ns[o].v == v){ fans = 0; return ; } fans = min(fans, abs(v - ns[o].v)); for(int i = 0; i < 2; i++) if(ch[i][o]) fans = min(fans, min(abs(v - ns[ch[i][o]].minv), abs(v - ns[ch[i][o]].maxv))); bool d = v > ns[o].v; Find(ch[d][o], v); return ; } int main() { int q = read(), ans = read(); insert(rt, ans); q--; while(q--) { int v = read(); fans = oo; Find(rt, v); ans += fans; // printf("get: %d ", fans); insert(rt, v); } printf("%d ", ans); return 0; }
bzoj1588:[hnoi2002]营业额统计
1588:[HNOI2002]营业额统计TimeLimit:5Sec??MemoryLimit:162MBDescription营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成... 查看详情
bzoj1588:[hnoi2002]营业额统计treap
1588:[HNOI2002]营业额统计TimeLimit: 5Sec MemoryLimit: 162MBSubmit: 13902 Solved: 5225[Submit][Status][Discuss]Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是 查看详情
bzoj1588:[hnoi2002]营业额统计[bst]
1588:[HNOI2002]营业额统计TimeLimit: 5Sec MemoryLimit: 162MBSubmit: 14151 Solved: 5366[Submit][Status][Discuss]Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是 查看详情
bzoj1588[hnoi2002]营业额统计treap
1588:[HNOI2002]营业额统计TimeLimit: 5Sec MemoryLimit: 162MBSubmit: 17740 Solved: 7298[Submit][Status][Discuss]Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是 查看详情
[bzoj1588][hnoi2002]营业额统计
[BZOJ1588][HNOI2002]营业额统计试题描述营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额... 查看详情
bzoj1588[hnoi2002]营业额统计
1588:[HNOI2002]营业额统计Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分... 查看详情
bzoj1588[hnoi2002]营业额统计splay模板
1588:[HNOI2002]营业额统计TimeLimit:5Sec MemoryLimit:162MBSubmit:16189 Solved:6482[Submit][Status][Discuss]Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营... 查看详情
bzoj1588:[hnoi2002]营业额统计(代码片段)
1588:[HNOI2002]营业额统计TimeLimit: 5Sec MemoryLimit: 162MBDescription营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账... 查看详情
bzoj1588:[hnoi2002]营业额统计
【算法】平衡树(treap)||双向链表【题解】#include<cstdio>#include<algorithm>#include<ctime>usingnamespacestd;constintmaxn=100010,inf=0x3f3f3f3f;intn,sum,ans,sz,root;structcyc{intl,r,rnd,num;}t[maxn]; 查看详情
bzoj1588[hnoi2002]营业额统计
1251:序列终结者TimeLimit: 20Sec MemoryLimit: 162MBSubmit: 3773 Solved: 1579[Submit][Status][Discuss]Description 网上有许多题,就是给定一个序列,要你支持几种操作:A、B、C、D。一看另一道题,又是一个序列 要支持... 查看详情
bzoj1588[hnoi2002]营业额统计
传送门 平衡树常规题,给出两种实现算法Treap版:1//OJ16102//byCydiater3//2016.9.14#include<iostream>5#include<cstdio>6#include<cstdlib>7#include<cstring>8#include<iomanip>9#include<str 查看详情
bzoj1588:[hnoi2002]营业额统计
Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当... 查看详情
[bzoj1588][hnoi2002]营业额统计无旋treap
[HNOI2002]营业额统计时间限制: 5Sec 内存限制: 162MB题目描述营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账... 查看详情
洛谷2234bzoj1588hnoi2002营业额统计
【题解】 treap模板题,直接用Treap维护前驱、后继,每次找到更接近当前val的加上就好了。1#include<cstdio>2#include<algorithm>3#definels(a[u].l)4#definers(a[u].r)5#defineLLlonglong6usingnamespacestd;7constintmaxn=200010;8intn,k 查看详情
bzoj1588:[hnoi2002]营业额统计
【传送门:BZOJ1588】简要题意: 给出n个数,每个数只能前面的任意一个数相减,要求差的绝对值最小,求出所有数做的差的最小绝对值的和(第一个数做得差的最小绝对值就是它自己)题解: 伸展树SPLAY,将n个数逐个放... 查看详情
bzoj1588:[hnoi2002]营业额统计双向链表/splay/treap
1588:[HNOI2002]营业额统计 Description营业额统计Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额... 查看详情
[bzoj1588][hnoi2002]营业额统计(splay)
...ger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营... 查看详情
bzoj1588:[hnoi2002]营业额统计splay瞎写
最近各种瞎写数论题,感觉需要回顾一下数据结构写一发splay冷静一下(手速过慢,以后要多练练)用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过)现在没有很追求代码优美,感觉得先打的对打的... 查看详情