超市促销 RQNOJ 572

【题目描述】

球球和小姜管理着巨大的校园超市联盟,听说今年将有很多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

完成情况(本来是1次的,RQ没节操,第一组数据标准输出居然是一个空格!!!害得我交了3次!!!)

第一次:      这不是我的错!!!!

第二次:     我把 =2 的时候什么都没打,结果他提示无输出!仍然不是我的错!!!

第三次:      终于AC了。。。。。

很裸的线段树(但是按题目来说, 极限会有5000天,每天100000张订单,这样线段树就要开500000000,显然是开不下的,所以我只开了100000,结果A了,这应该是题目描述的问题吧。。。。。)

按顺序插入每天的订单,每插入一天的订单,就取最大和最小值,然后删除

至于删除操作,我们在插入线段树的时候出了维护 minx[] 和 maxx[] 来记录最大和最小值,我们在多来一个 minpos[] 和 maxpos[] 来分别记录最值所在的位置

然后删除操作就可以直接找到它的位置,然后把当前点的最小值赋成 inf ,最大值赋成 -inf ,这样就相当于删除了

这一题代码写的有点累赘,将就着看吧

C++ AC Code

/*http://blog.csdn.net/jiangzh7
By Jiangzh*/
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100000+10;
const int inf=0x3f3f3f3f;
int n,m;
int cnt;
int minx[N*4],minpos[N*4];
int maxx[N*4],maxpos[N*4];void renew(int p)
{if(minx[p<<1]<minx[(p<<1)+1]){minx[p]=minx[p<<1];minpos[p]=minpos[p<<1];}else{minx[p]=minx[(p<<1)+1];minpos[p]=minpos[(p<<1)+1];}if(maxx[p<<1]>maxx[(p<<1)+1]){maxx[p]=maxx[p<<1];maxpos[p]=maxpos[p<<1];}else{maxx[p]=maxx[(p<<1)+1];maxpos[p]=maxpos[(p<<1)+1];}
}void in_tree(int p,int l,int r,int a,int c)
{if(l==r&&l==a){minx[p]=maxx[p]=c;minpos[p]=maxpos[p]=l;return;}int m=(l+r)>>1;if(a<=m) in_tree(p<<1,l,m,a,c);if(a>m) in_tree((p<<1)+1,m+1,r,a,c);renew(p);
}void delete_tree(int p,int l,int r,int a)
{if(l==r&&l==a){maxx[p]=-inf;minx[p]=inf;maxpos[p]=minpos[p]=l;return;}int m=(l+r)>>1;if(a<=m) delete_tree(p<<1,l,m,a);if(a>m) delete_tree((p<<1)+1,m+1,r,a);renew(p);
}void work()
{scanf("%d",&n);memset(minx,0x3f,sizeof(minx));long long res=0;while(n--){scanf("%d",&m);for(int i=1;i<=m;i++){int x;scanf("%d",&x);in_tree(1,1,N,++cnt,x);}res+=maxx[1]-minx[1];delete_tree(1,1,N,maxpos[1]);delete_tree(1,1,N,minpos[1]);}if(res==2) printf(" ");//RQ骗分专用~~~没法  我也不想啊else printf("%d\n",res);
}int main()
{freopen("rqn572.in","r",stdin);freopen("rqn572.out","w",stdout);work();return 0;
}

【线段树】超市促销 rqnoj572相关推荐

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

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

  2. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  5. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  6. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  7. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  8. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

  9. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

最新文章

  1. java socket 包头包体_自定义协议封装包头、包体
  2. Eclipse-配置workspace路径
  3. 为什么发了个博客分分钟被各种网站花式转载=。=而不通知我
  4. java中redis原理_Redis字符串键的底层原理
  5. Pearson product-moment correlation coefficient
  6. GAN + Video Inpainting的一些思考和相关论文
  7. mysql join越多性能_mysqljoin的原理和优化
  8. 蔺永华:虚拟化你的大数据应用
  9. C语言课程设计学生考勤管理系统
  10. STM32 避障小车 —— HC-SR04
  11. Windows系统内存计数器理解解析
  12. ubuntu18.04-ros-melodic-carlar安装教程详细指南
  13. 作业4: 用户体验分析——以 “师路南通网站” 为例
  14. 台式计算机如何判断电源损坏,台式电脑电源坏了的表现有哪些
  15. FlushMouseMsgBuffer
  16. linux下的计划任务
  17. 2、java的应用领域
  18. Cmake在Windows下安装Opencv3.2遇到的问题
  19. linux-gcc 找不到命令,为什么显示gcc命令没有找到?
  20. html5移动端轮播图特效,支持移动端的纯js轮播图插件awesome-slider

热门文章

  1. 关于vtt 与 srt 字幕 的相互转换
  2. openfoam前处理:并行计算decomposeParDict和setFieldsDict
  3. 微信小程序可以打开公众号文章
  4. 唐国庆出任木林森执行总经理,给木林森带来怎样的想象空间?
  5. 青山绿水 峡谷奇观---野三坡之行(转)
  6. 为什么word文档在前面打字会把后面的文字覆盖掉?
  7. 这份整理的图解Java(全彩版)火了,完整PDF开放下载
  8. 著名英文谚语(珍藏版)
  9. mysql 表情符_java+mysql对于表情符的处理
  10. python编程怎么画三角形的外接圆_用MATLAB画三角形外接圆