HNOI2002 营业额统计 平衡查找树

先用set 撸了一发

 1 // File Name: first.cpp
 2 // Author: darkdream
 3 // Created Time: 2014年07月15日 星期二 19时41分13秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #include<climits>
25 #include<queue>
26
27 using namespace std;
28
29 int main(){
30
31     long long n ;
32     while(scanf("%lld",&n) != EOF)
33     {
34       long long x;
35       set<long long>a;
36       set<long long>::iterator l,en,be;
37       set<long long>::iterator r;
38       long long sum = 0 ;
39       scanf("%lld",&x);
40       sum += x;
41       a.insert(x);
42       for(int i = 2;i <= n;i ++)
43       {
44           scanf("%lld",&x);
45           if(a.find(x) != a.end()) continue;
46
47           a.insert(x);
48           en = a.end();
49           --en;
50           if(a.find(x) == en)
51           {
52              l = a.find(x);
53               --l ;
54         //     printf("**%lld\n",*l);
55              sum += x - *l;
56           }else if(a.find(x) == a.begin()){
57               l = a.find(x);
58               ++l  ;
59               sum += *l -x;
60         //      printf("**%lld\n",*l);
61           }else {
62               l = a.find(x);
63               r = a.find(x);
64               r = ++r;
65               l = --l;
66         //      printf("**%lld %lld\n",*l,*r);
67               sum += min(x-*l,*r-x);
68           }
69
70       }
71       printf("%lld\n",sum);
72     }
73
74     return 0;
75 }

测试数据 #1: Accepted, time=20ms, mem=1256KB, score=10
测试数据 #2: Accepted, time=0ms, mem=640KB, score=10
测试数据 #3: Accepted, time=0ms, mem=636KB, score=10
测试数据 #4: Accepted, time=10ms, mem=956KB, score=10
测试数据 #5: Accepted, time=30ms, mem=1996KB, score=10
测试数据 #6: Accepted, time=20ms, mem=1964KB, score=10
测试数据 #7: Accepted, time=20ms, mem=1620KB, score=10
测试数据 #8: Accepted, time=20ms, mem=1620KB, score=10
测试数据 #9: Accepted, time=20ms, mem=1244KB, score=10
测试数据 #10: Accepted, time=0ms, mem=640KB, score=10
Time = 140ms Mem = 1996KB Score= 100

HNOI2002 营业额统计 平衡查找树

时间: 2024-10-04 04:29:51

HNOI2002 营业额统计 平衡查找树的相关文章

P2234 [HNOI2002]营业额统计 (权值线段树)

P2234 [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定义了一种最小波动值来衡量这种情况: 当最小波动值越大

BZOJ 1588: [HNOI2002]营业额统计 双向链表

BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 9619  Solved: 3287 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来

[BZOJ1588][HNOI2002]营业额统计 无旋Treap

[HNOI2002]营业额统计 时间限制: 5 Sec  内存限制: 162 MB 题目描述 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定

BZOJ 1588: [HNOI2002]营业额统计

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 14396  Solved: 5521[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

HNOI2002营业额统计(平衡树)

标准的平衡树. 贴个splay吧 var v,l,r,fa:array[0..100000] of longint; root,x,i,n,ans:longint; procedure zig(x:longint); var y,z:longint; begin y:=fa[x];z:=fa[y]; if root=y then root:=x; l[y]:=r[x]; if r[x]<>0 then fa[r[x]]:=y; r[x]:=y; fa[y]:=x; fa[x]:=z; if z

BZOJ 题目1588: [HNOI2002]营业额统计(Splay Tree 求前驱后继)

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 10828  Solved: 3771 [Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者

算法5-1:平衡查找树之二三树

平衡查找树的目标是实现查找.插入.删除操作在最坏情况下的复杂度均为logN. 本节将介绍二三查找树. 二三树中有两种节点: 二节点对应一个键,有两个子节点 三节点对应两个键,有三个子节点 二三查找树非常平衡,每个空节点到根节点的距离都是一样的 . 查找操作 在二三树中查找一个键的时候有以下规则: 如果是二节点,二节点对应1个值,如果要查找的值比该节点对应的值小,就往左侧深入,反之亦成 如果是三节点,三节点对应2个值,如果比两个值都小,就往左侧深入,如果介于两个值之间,就往中间深入,如果比两个值都

luogu P2234 [HNOI2002]营业额统计

二次联通门 : luogu P2234 [HNOI2002]营业额统计 /* luogu P2234 [HNOI2002]营业额统计 splay 每次插入一个数 查询它的前驱与后继 有两点需要注意 1.大部分的数据有误..即输入的数据不够.. 2.判断前驱后继是否存在 3.注意判断该数是否已出现过 */ #include <cstdio> #define Max 50000 #define INF 1e8 namespace Z { inline int min (int a, int b)

BZOJ1588: [HNOI2002]营业额统计[BST]

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 14151  Solved: 5366[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其