火车票问题.以及x轴连续矩形,最大面积问题
假设火车有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轴连续矩形,最大面积问题的更多相关文章
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...
- HDU1255 覆盖的面积 —— 求矩形交面积 线段树 + 扫描线 + 离散化
题目链接:https://vjudge.net/problem/HDU-1255 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<= ...
- HDU1255 扫描线 矩形交面积 离散化
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?
靠墙的两边设为x,墙的对边设为y,有2x+y=L; 则y=L-2x, 矩形面积函数为xy=x(L-2x)=-2x2+xL,即f(x)=-2x2+xL 这时就是求二次函数的极值问题了. 按二次函数y=a ...
- maximal-rectangle——找出最大矩形的面积
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- POJ 1177 Picture(线段树 扫描线 离散化 求矩形并面积)
题目原网址:http://poj.org/problem?id=1177 题目中文翻译: 解题思路: 总体思路: 1.沿X轴离散化建树 2.按Y值从小到大排序平行与X轴的边,然后顺序处理 如果遇到矩形 ...
- LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形). 今天的 ...
- hdu2056 矩形重叠面积(水题)
题意: 给你两个矩形,问你他们的重叠面积是多少. 思路: 这两个矩形是平行x和y轴的,所以水题,不解释. #include<stdio.h> typedef stru ...
- Highcharts 连续的堆积面积图
说明:设置两个柱形图间距为0 Highcharts柱图,设置X轴各Column的间距 plotOption : { column : { // 设置每个柱自身的宽度 ...
随机推荐
- 20180929 北京大学 人工智能实践:Tensorflow笔记03
更改的程序部分如下: 另: 难?????????????见链接: https://www.bilibili.com/video/av22530538/?p=17 + (完)
- caioj 1106 树形动态规划(TreeDP)1:加分二叉树
解这道题的前提是非常熟悉中序遍历的方式 我就是因为不熟悉而没有做出来 中序遍历是5 7 1 2 10的话,如果1是根节点 那么5 7 1就是1的左子树,2, 10就是右子树 这就有点中链式dp的味道了 ...
- 紫书 例题 10-12 UVa 1637(概率计算)
以9元组来代表当前状态,每一元是每一堆剩下的牌数 枚举当前状态所有可以拿掉牌的情况,然后递归下去求 概率,当牌拿完的时候概率为1 那么这里的实现非常的秀,用到了vector来代表9元组 然后还用到了m ...
- Object-C,遍历目录
最近武汉连续下雨很多天,降温了2次,温度一下子由28度到14度,再到8度,手太冷了. 加上最近发生了一些比较棘手的家庭琐事,最近没心情继续学习Object-C. 后来,我想明白了,心情不好的时候,还是 ...
- Spring EL表达式和资源调用
Spring EL表达式 Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言. Spring 开发中经常涉及调用各种资源的情况, ...
- Unity C# 设计模式(一)单例模式
动机(Motivation): 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率 意图: 保证一个类仅有一个实例,并提供一 ...
- 【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) A】 Palindromic Supersequence
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 字符串倒着加到原串右边就好 [代码] #include <bits/stdc++.h> using namespace ...
- 【转】 我的java web登录RSA加密
[转] 我的java web登录RSA加密 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前也大概想过, ...
- ubuntu下安装RemixOS双系统(Android x86)
这篇文章主要讲在怎样在ubuntu下安装RemixOS pc版(Android x86版本号),下面两种做法的思路都适合安装不论什么版本号的Android x86版本号到ubuntu系统上,仅仅须要改 ...
- strchr函数的实现而不是使用
刚刚在写一个程序的时候突然须要用到定位到一个字符串中第一次出现某个字符的位置,于是就找到了strchr()函数,之前从没实用过的,^_^当然我能够直接调用就可以.可是拥有良好程序素质的洗衣袋决定要想实 ...