Java学习笔记-多线程
Java多线程详解
Java多线程详解
欧拉筛法,一种可以在线性的时间复杂度内筛出素数的算法。
John
的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们把这些工作称为完成本项工作的准备工作。至少有一项杂务不要求有准备工作,这个可以最早着手完成的工作,标记为杂务 1。John
有需要完成的 n 个杂务的清单,并且这份清单是有一定顺序的,杂务 k(k>1) 的准备工作只可能在杂务 1 至 k-1 中。
写一个程序从 1 到 n 读入每个杂务的工作说明。计算出所有杂务都被完成的最短时间。当然互相没有关系的杂务可以同时工作,并且,你可以假定John
的农场有足够多的工人来同时完成任意多项任务。
把一个图的所有节点排序,使得每一条有向边$(u, v)$对应的$u$都排在$v$的前面。在图论中,这个问题称为拓扑排序(topological sort)。
不难发现:如果图中存在有向环,则不存在拓扑排序,反之则存在。所以可以用拓扑排序来检验是否存在有向环。
一种数据结构,以储存边的方式来存储图。构造方法如下:读入每条边的信息,根据边的起点将边存入对应链表中。通过和链表一样的遍历可以查出以某个点出发的边。除了不能直接用起点终点定位以外,前向星几乎是完美的。
您需要写一种数据结构,来维护一些数( 都是$10^9$以内的数字)的集合,最开始时集合是空的。其中需要提供以下操作,操作次数$q$不超过$10^4$:
查询$x$数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名)。
查询排名为$x$的数。
求$x$的前驱(前驱定义为小于$x$,且最大的数)。若未找到则输出-2147483647。
求$x$的后继(后继定义为大于$x$,且最小的数)。若未找到则输出 2147483647。
插入一个数$x$。
BST(Binary Search Tree)具有以下性质:
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。
第一天的最小波动值为第一天的营业额。
该天的最小波动值=min{|该天以前某一天的营业额-该天营业额|}。
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n<100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes
,否则输出 No
。
Update your browser to view this website correctly.&npsb;Update my browser now