假设火车有10个站点: 1000个座位

  api(1)  -> param  : leftStation, rightStation -> result : cnt                                  ps: 查询接口  还剩多少票

  api(2)  -> param  : leftStation, rightStation -> result : orderNumber or faild      ps: 买票接口 买到的票的 座位号

状体分析:

  票的种类有 -> C(10, 2)  * 1000 也就是 45 * 1000 即 4.5 * 10e4;

  过程要点:

    (1)准备工作:把这45个旅程 映射成 [1-45]序列号.          .

            处理出存在交集的旅程的集合也就是[45]个set数组,

              里面记录和这个旅途有交集的旅途序列号,复杂度很低O(n^2)但是 n = 45,且是固定属性.不存在并发问题.

    (2)存  储:

        内 存:45种旅途都可以买到这一千个座位,因此需要[45] 个 set数组.还有就是每个座位的位图9bit;  根据位图

        数据库:订单,等不详细说了,位图一定要存储 因为这 45个set要根据这些位图初始化.

    (3)维  护:

          接口1的查询只要把对应set的size返回即可.

          接口2的操作,

              1.返回set中的一个座位号,

              2.维护这个座位号的位图,基于CAS操作,比如买2-4的只要CAS[2-3] 这几位 就好 从00 -> 11,

                成功到3,失败到1.这个循环最多三次.

              3.并且根据第一步处理出的冲突集,找到他们的座位存储set,

              4.同时删除这些set和本set的座位号.(ps:在删除其冲突的座位号的时候可能会不存在忽略就好)

              ps.CAS失败了要重试下,重新找座位,如果下次找不到就失败,能找到在试一次,最多三次.

    ps: 退票怎么半?

      退票需要 额外 维护每个座位的位图,因为旅途最细只有9段,所以一个座位只需要9bit. 并重新计算这个作为的, 这有关冲突图,这里有些复杂.

  并发问题:

    怎么说呢这种设计锁会比较重,因为你买票的时候要锁定的东西比较多,因为你买的 作为是要影响别的旅途的,又以旅途为先行,所以锁重

    但是我们维护了作为的位图,我们最后的一个交易的时候完成 需要以这个位图为准,防止并发问题.

    提示锁这种,

      推荐看下java的 可冲入锁,写的很好非公平的策略就好,他会初始的去措辞尝试获得, 此时叫自旋锁,然后才会挂起到队列等待唤醒.

      或者是ConcurrentHashMap 在jdk1.8的实现,更细粒度的锁,很方便.

二:x轴连续排列举行面积问题:

  题目:是这样的 有一个非负数整数集合 for.example [ 1, 3, 4, , 4, 5 ,3, 2 7] ,  对于[l,r] 这个区间的值的定义是 sum(l ,r ) * min (x, r) ; 求最大值: hint array.length = 1e6

  假设:

    答案一定在 [一个值往左右扩展到直到那个元素比他大], 反过来想如果不在那么这个集合的sum肯定是可以增长的,所以结果一定是这样的区间

  要求:

    就数据量而言,需要我们经过一次便利,就能求出这个结果,所以我们该如何去维护这个值;

  过程:

    我们需要维护一个单调递增的栈, 大多数人都叫他单调栈,因为他存储的元素是单调的,所以这么叫.

    操作:

      (1)元素入栈

        1,记录值(value, weight) -> weight 初始是1,value是入栈的值,

        2,先让大于等于value的值出栈,并且更新 ANS  [value * weight]   对比决定是否更新.   

        3,如果这个栈顶元素也大于等于value, 把出栈的这个值的重量给目前的栈顶元素, 到步骤(2),否则到步骤(4).

        4,把这个出栈的重量给 准备入栈的元素.

        5,元素入栈

      (2)元素全部入栈后 因为还有元素在里面. 剩下的元素逐个出栈,  只不过把这个元素的重量给下一个栈顶元素. 类似与插入-1.

    至此:

      结果统计完毕.

    hint:

       其实他每次出栈的 就是我们刚开说的那种区间, 以那个元素为做小值向左右扩展得到的区间值.

      对于栈顶元素.

        一个元素的入栈 会促使 左侧比他大的合并,如后出栈的时候右侧肯定也都合并到自己身上,因此栈顶元素 对于我们所扫描到的位置一定是合法的

      栈顶元素肯定向右或者说向左都是达标的;

      

      有点像斜率优化问题. 怀念以前,现在是个弱鸡(ง •̀_•́)ง

失败者 从来没有提条件的权利.

火车票问题.以及x轴连续矩形,最大面积问题的更多相关文章

  1. TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)

    描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...

  2. HDU1255 覆盖的面积 —— 求矩形交面积 线段树 + 扫描线 + 离散化

    题目链接:https://vjudge.net/problem/HDU-1255 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<= ...

  3. HDU1255 扫描线 矩形交面积 离散化

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?

    靠墙的两边设为x,墙的对边设为y,有2x+y=L; 则y=L-2x, 矩形面积函数为xy=x(L-2x)=-2x2+xL,即f(x)=-2x2+xL 这时就是求二次函数的极值问题了. 按二次函数y=a ...

  5. maximal-rectangle——找出最大矩形的面积

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  6. POJ 1177 Picture(线段树 扫描线 离散化 求矩形并面积)

    题目原网址:http://poj.org/problem?id=1177 题目中文翻译: 解题思路: 总体思路: 1.沿X轴离散化建树 2.按Y值从小到大排序平行与X轴的边,然后顺序处理 如果遇到矩形 ...

  7. LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形). 今天的 ...

  8. hdu2056 矩形重叠面积(水题)

    题意:       给你两个矩形,问你他们的重叠面积是多少. 思路:      这两个矩形是平行x和y轴的,所以水题,不解释. #include<stdio.h> typedef stru ...

  9. Highcharts 连续的堆积面积图

    说明:设置两个柱形图间距为0 Highcharts柱图,设置X轴各Column的间距 plotOption : {    column : {        // 设置每个柱自身的宽度        ...

随机推荐

  1. [JLOI2011]飞行路线(分层图)

    [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n 个城市设有业务,设这些城市分别标记为 0 到 n−1 ,一共有 m ...

  2. 【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) D】Tree

    [链接] 我是链接,点我呀:) [题意] 让你在树上找一个序列. 这个序列中a[1]=R 然后a[2],a[3]..a[d]它们满足a[2]是a[1]的祖先,a[3]是a[2]的祖先... 且w[a[ ...

  3. 洛谷——P3368 【模板】树状数组 2

    https://www.luogu.org/problem/show?pid=3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入 ...

  4. postgresql拓展if、ifnull、group_concat函数

    postgresql版本是8.2.15. 最近陆续有数据分析师从impala.hive转到查询gpdb,gpdb虽然能够支持在查询语句中带多个distinct,但是缺少相应的if.ifnull.gro ...

  5. HDU 3911 线段树区间合并

    北京赛区快了,准备袭击数据结构和图论.倒计时 18天,线段树区间合并.维护一个最长连续.. 题意:给一个01串,以下有一些操作,问区间最长的连续的1的个数 思路:非常裸的线段树区间合并 #includ ...

  6. Thinking in UML 学习笔记(三)——UML核心视图之类图

    类图的作用:用于展示系统中的类及其相互之间的关系. UML在解决面向对象的方法中对类理解为三个层次,各自是:概念层.说明层.实现层.在UML中,从開始的需求到终于设计类,类图也是环绕这三个层次的观点进 ...

  7. javascript对象如何使用

    javascript对象如何使用 一.总结 一句话总结:JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 因为函数是对象,所以自定义对象的创建中有种方法就是函数 1.js中的 ...

  8. word中添加Mathtype公式行间距改变问题

    转载链接:http://blog.sciencenet.cn/home.php?mod=space&uid=471807&do=blog&id=616838 最近碰到在word ...

  9. 硬件时间,操作系统时间,Windows 和linux 双系统时间差8小时问题说明

    1.硬件时间:硬件时钟是存储在主板上CMOS里的时间即BIOS时间,关机后该时钟依然运行,主板的电池为它供电.对应于嵌入式设备有一个RTC模块.硬件时钟即RTC时钟.信息比较少没时区.夏令时的概念. ...

  10. strings---对象文件或二进制文件中查找可打印的字符串

    strings命令在对象文件或二进制文件中查找可打印的字符串.字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束. strings命令对识别随机对象文件很有用. 语法 strings [ - ...