Description

Great Bytelandish的超级市场网络请你编写一个程序模拟促销商品的成本费用(simulating costs of the promotionbeing prepared)。推销商品要遵守以下规则:

1. 想参与促销的顾客在自己的帐单上写下个人信息,然后将票据投入一个特制的投票箱中。

2. 促销期间,每天结束后,有2张票据将被取出——消费金额最大的和最小的两张帐单。消费金额最大的那位顾客得到的奖品价值等于取出的2张帐单的差额。

3. 为了避免多次得奖,所有取出的帐单将不再放回箱中,其余的票继续参加促销活动.

由于商场的顾客特别多,所以每天投票箱中都至少有2张帐单。你的任务是计算在促销期间,商家一共要送出多少前的礼品。

Code

#include <cstdio>
#include <algorithm>
#define N 1000010
#define lc(x) T[(x)][0]
using namespace std;int T[N][2],fa[N],k[N],tot,rt,Ans;inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}void rotate(int p){int q=fa[p],y=fa[q],x=(T[q][1]==p);T[q][x]=T[p][x^1];fa[T[q][x]]=q;T[p][x^1]=q;fa[q]=p;fa[p]=y;if(y){if(T[y][0]==q) T[y][0]=p;else if(T[y][1]==q) T[y][1]=p;}
}void splay(int x){for(int y;y=fa[x];rotate(x))if(fa[y]) rotate((x==lc(y))==(y==lc(fa[y]))?y:x);rt=x;
}void Insert(int x,int v){if(!rt){rt=++tot;T[rt][0]=T[rt][1]=0;fa[rt]=0;k[rt]=v;return;}int y;for(;;){y=T[x][k[x]<v];if(!y){y=++tot;k[y]=v;T[y][0]=T[y][1]=0;fa[y]=x;T[x][k[x]<v]=y;break;}x=y;}splay(y);
}void Del(int x){splay(x);if(T[x][0]*T[x][1]==0) rt=T[x][0]+T[x][1];else{int t=T[x][1];while(T[t][0]) t=T[t][0];T[t][0]=T[x][0],fa[T[t][0]]=t;rt=T[x][1];}fa[rt]=0;
}int f(int x,int b){while(T[x][b]) x=T[x][b];int r=k[x];Del(x);return r;
}int main(){int day=read();while(day--){int n=read();while(n--) Insert(rt,read());Ans+=f(rt,1)-f(rt,0);}printf("%d\n",Ans);return 0;
}

转载于:https://www.cnblogs.com/void-f/p/8390559.html

[BZOJ2947]促销(Splay)相关推荐

  1. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  2. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  3. AVL树、splay树(伸展树)和红黑树比较

    AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...

  4. 联想r720内存频率_联想 IdeaPad14s 2020 轻薄本双十一促销

    IT之家11月10日消息 作为一款主打轻薄的笔记本电脑,联想 IdeaPad14s 2020 自推出以来便受到不少办公学习用户的青睐. 如今,这款联想 IdeaPad14s 2020 轻薄笔记本已开启 ...

  5. bzoj1251: 序列终结者 (splay)

    splay可以用于维护序列,比如noi的维修序列,比如这道 发现当时splay没写总结,也没题解 然后重新写splay竟然耗了一个晚上 结果是因为max[0]没有附最小值!!血一样的教训 最后祭出in ...

  6. BZOJ 1503 郁闷的出纳员(splay)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...

  7. [BZOJ1503]郁闷的出纳员(Splay)

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  8. Splay ---- 2018牛客多校第三场 区间翻转搞区间位移 或者 rope可持久化块状链表

    题目链接 题目大意: 就是每次把牌堆中若干个连续的牌放到堆顶,问你最后牌的序列. 解题思路: Splay 区间翻转的模板题: 对于一个区间[1,2,3,4,5,6,7,8][1,2,3,4,5,6,7 ...

  9. splay + 线段树 ---- P3765总统选举 [带修改的动态区间众数 摩尔投票+n棵splay]

    题目链接 题目大意: 解题思路: 1.摩尔投票法: 题意是找n个数内出现次数大于n/2的数 保证存在这个数用的方法叫做摩尔投票法 首先我们注意到这样一个现象: 在任何数组中,出现次数大于该数组长度一半 ...

最新文章

  1. 李开复看2019投资趋势:最坏的时代将酝酿最伟大的公司
  2. Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器
  3. 如何把本地开发的 SAP UI5 应用部署到 ABAP 服务器上
  4. 无法使用UI configuration的trouble shooting
  5. 检测机安装mysql_centos安装mysql的正确方法
  6. 内核态和用户态的区别
  7. Zoj 2947——Abbreviation
  8. Linux重定向的理解
  9. c语言添加变量到数据库+a+ +b+ 的方法,《C程序设计基础》模拟考试题(含答案)...
  10. VoIP之语音编码器
  11. 【GNN】图表示学习Graph Embedding综述
  12. hibernate 调用存储过程
  13. 一 c语言程序设计 张玉生版
  14. PreScan笔记(2.1)——MATLAB更改初始data model文件中的参数
  15. 如何学好3D游戏引擎编程
  16. 如何用CSDN-markdown编辑器写博客
  17. EBS开发_创建销售人员API
  18. xp计算机启动检测硬盘,WindowsXP系统,每次开机都自动检测硬盘处理办法
  19. python透视表画图_如何用Python实现透视表?
  20. Alpha 测试(α测试) Beta 测试(β测试)区别

热门文章

  1. Win8.1下VM与Hyper-v冲突解决方法
  2. Lighttpd 配置与性能优化
  3. chrome inspect 离线调试-工具包 怎么使用
  4. mysql--常用基础命令
  5. python -- 青少年如何使用 Python 开始游戏开发
  6. zw版【转发·台湾nvp系列Delphi例程】HALCON SmoothImage
  7. MySQL 5.7 并行复制实现原理与调优
  8. css -- 运用@media实现网页自适应中的几个关键分辨率
  9. 设计模式(策略模式)
  10. 【Android开发】范例1-实现带描边的圆角图片