【平衡二叉树】超市促销
题目:超市促销
题目描述
球球和小姜管理着巨大的校园超市联盟,听说今年将有很多OIer到学校来参加NOIP,他俩决定在NOIP期间(包括准备期间)举行促销活动。
促销活动必须遵守下列规定:
想要参加促销的每位OIer,必须将自己的每笔消费账单丟入指定的盒子里。每天活动结束时,球球和小姜会从盒子里挑出金额最大和最小的两张账单。消费最多的客户将要得到一笔奖金! 数额是挑出的两张金额的差的绝对值。输入数据保证每天总可以找到两张账单。
为了避免重复获奖,每天挑出的账单不能重新放回盒子里,其余的账单将留在盒中,继续参加促销活动,直到活动结束。
在紧张的复习NOIP阶段,球球和小姜实在没有精力来计算促销活动的花费,他们找到了聪明的你,你的任务是根据每天活动的信息算出促销活动的总花费。
输入格式
输入的第一行是一个整数n,表示促销的天数。(1 <= n <= 5000)
在接下来的n行中,每行有若干个非负整数,用空格隔开。第i+1行的数据代表第i天的账单信息,每行第一个整数k(0 <= k <= 10^5)。表示今天有多少个新账单。接下来k个正整数表示每张账单的金额wij(1 <= wij <= 10^6)
输出格式
输出中只有一个整数,表示整个促销活动期间所有的花费。
样例输入
5 3 1 2 3 2 1 1 4 10 5 5 1 0 1 2
样例输出
19
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <cstring>
#include <string>
#include <cstdio>const long maxn = 5010;
long n;long root = 0;
long rs[maxn];
long ls[maxn];
long tree[maxn];
long sum[maxn];
long hr[maxn];
long top = 0;long ABS(long a)
{return a>0?a:-a;
}void l_rotate(long &k)
{long tmp = rs[k];rs[k] = ls[tmp];ls[tmp] = k;sum[tmp] = sum[k];sum[k] = sum[ls[k]]+sum[rs[k]];k = tmp;
}void r_rotate(long &k)
{long tmp = ls[k];ls[k] = rs[tmp];rs[tmp] = k;sum[tmp] = sum[k];sum[k] = sum[ls[k]]+sum[rs[k]];k = tmp;
}void insert(long& k,long v)
{if (k == 0){top ++;tree[top] = v;hr[top] = rand();sum[v] = 1;k = top;return; }sum[k] ++;if (v <= tree[k]){insert(ls[k],v);if (hr[ls[k]]<hr[k])r_rotate(k);}else{insert(rs[k],v);if (hr[rs[k]]<hr[k])l_rotate(k);}
}long first(long &k)
{if (!ls[k]){long tmp=k;k=rs[k];return tree[tmp];}return first(ls[k]);
}long last(long &k)
{if (!rs[k]){long tmp=k;k=ls[k];return tree[tmp];}return last(rs[k]);
}inline int getint()
{int rs=0;char tmp;bool sgn=1;do tmp = getchar();while (!(isdigit(tmp))&&tmp-'-');if (tmp=='-'){tmp=getchar();sgn=0;}do rs = (rs<<3)+(rs<<1)+tmp-'0';while (isdigit(tmp=getchar()));return sgn?rs:-rs;
}int main()
{n = getint();long ans = 0;for (long i=1;i<n+1;i++){long k = getint();while ( k -- )insert(root,getint());ans += ABS(first(root)-last(root));}if (ans-2)printf("%ld",ans);elseprintf(" ");return 0;
}
【平衡二叉树】超市促销相关推荐
- 7-69 超市促销 (6 分)
7-69 超市促销 (6 分) 已知某超市内大白菜正在促销,单次购买5公斤以下每公斤1.8元:5公斤以上(包括5公斤,下同)每公斤1.6元:10公斤以上每公斤1.4元:20公斤以上每公斤1.0元.编程 ...
- 【线段树】超市促销 rqnoj572
超市促销 RQNOJ 572 [题目描述] 球球和小姜管理着巨大的校园超市联盟,听说今年将有很多OIer到学校来参加NOIP,他俩决定在NOIP期间(包括准备期间)举行促销活动. 促销活动必须遵守下列 ...
- 超市促销叫卖的语音是怎么做的?介绍简单小方法,方便又快捷
超市促销叫卖的语音是怎么做的?介绍简单小方法,方便又快捷 平时在逛超市或者逛街的时候,经常可以听到一些叫卖声,比如超市促销的声音,或者小摊贩们用喇叭做的沿街叫卖的声音等等.那么,如果我们自己想要做这种 ...
- JAVA编写学校超市选址问题_中小型超市商品管理系统设计与实现【开题报告+文献综述+毕业论文】.docx...
本科毕业论文开题报告信息管理与信息系统中 小 型 超 市 商 品 管 理 系 统 设 计 与 实 现一.立论依据 1.研究意义.预期目标随着中国经济的不断发展,计算机的普及率越来越高,超市的管理手段发 ...
- java 策略模式 促销_设计模式之策略模式
0x01.定义与类型 定义:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户. 从一系列里抽象出不变的部分 策略模式是将可变的部分从程序中抽象分离成算法 ...
- 计算机病毒的八个特征,计算机病毒的五个特征- 1:.单项选择题(8)
单项选择题 A.人不可避免地会导致贫穷 B.人一旦起了争夺,就说明有欲望没有达到 C.只有当人的追求没有止境时,才会导致贫穷 D.如果没有发生混乱,说明追求并不是没有止境的 76:一间房屋的长.宽.高 ...
- elxel表格纸张尺寸_印刷设计必懂知识:印刷纸张类型介绍
纸引未来网,造纸印刷包装行业人聚集地,有纸张价格指数,求购彩盒.纸张订单信息 纸引未来网讯 关于印刷纸张种类主要按纸张包装形式划分和用途划分,介绍了常见的11种印刷纸张类型,这将是一个系列的印刷设计知 ...
- 撕掉“丑”的标签,体素是如何让游戏更有趣的?
大家好,又到了更新Monster Farm开发日志的时候,这次是由我大狸主讲.作为更文一定要又臭又长又啰嗦的强迫症,我已经看不下去前面延静斋孙(Zed) Erenyx(下文可能会习惯成自然地称他为萍萍 ...
- 啥?分布式啥?啥事务?
二将军问题 我们先来看个故事,相信会有助于你对分布式事务的理解.二将军问题是一个计算机领域一个经典的问题. 「故事背景」黑白两军交战之际,两股白军将黑军被围困在山谷之中:山谷两侧任意一股白军都比山谷中 ...
最新文章
- DroidPilot 测试脚本详解 (一)
- linux centos7 yum 报错 Public key for *.rpm is not installed 解决方法
- 2.5亿被腰围改变的中国人,哪个省胖子最多?
- RME二次开发之“修改矩形风管为圆形风管”即实现“天圆地方”连接。
- RocketMQ常见面试题
- PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
- c语言程序设计2020年版,2020年新版c语言程序设计题库.docx
- 微信app支付php案例分析,PHP实现APP微信支付的实例讲解
- Python爬虫之爬取豆瓣图书TOP250
- 实体关系图 (ERD) 指南
- 好程序员大数据培训之Hadoop常见问题
- Hive创建表的几种方式
- 300张现场照片,揭秘移动云大会!
- Leetcode 2327. Number of People Aware of a Secret [Python]
- mac怎么查node版本_Mac更新node版本和npm版本
- 基于JavaWeb的网上书店的设计与实现
- xampp的下载安装及使用
- java 在数组末尾添加元素和在任意位置删除元素
- 也看罗永浩的锤子手机
- 微信小程序导入csv文件乱码问题