Codeforces Round #223 (Div. 1)

题目:http://codeforces.com/contest/380

A:

由于询问是单调的,直接顺着枚举每个区间即可。

B:

题意: 给你个高度为n的树,高度为1的节点有1个,标号为1,然后按照规律生成节点,标号为2的幂次的结点有左右儿子,其他的只有右儿子,生成高度为n的树。

有两种操作,第一种在高度为 t 的标号为 l ~ r 的节点加入值x, 第二种询问高度为 t 的标号为v的节点的子树里的不同值有多少个。

思路: 对于每个插入操作直接插入在t层,对于每个询问,枚举 t 层到第n层,维护当前层覆盖的l , r ,判断和当前层插入的是否有交即可。

Code_B

C:

思路:线段树,对于每个区间维护三个值,左边的右括号数、合法的括号对数、右边的左括号数,两个区间合并的话,左边区间的左括号和右边区间的右括号匹配,然后也是维护下三个值。

Code_C

D:

题意:电影院里有n个连排座位,每个座位两边有两个放东西的位置,也就是说总共有n+1个放东西的位置。陆续有人来坐下,如果有人来了两边的放东西的位置都要与别人分享,也就是说两边都有人了,那他就不开心了。。。现在告诉每个位置是第几个人来的,问让所有来的人都开心的方案数有多少种。

思路:对于每个位置都不确定的话,方案数就是2^(n-1) ,否则,将每个已知来的人的顺序排个序,可以知道合法方案的每个时刻的状态位置占有情况肯定是连续的一段被占有的。所以可以很容易想到,对于第一个确定位置的人来说,如果他不是第一个人,假设为第x个人,那么他肯定是前x个人的连续区间的最左边或者最右边,确定了一种后接下来的人加进来后的区间也都是确定的了,直接递归统计就可以,只需要计算两种情况——第一个人在前x个人的最左边、在最右边。

Code_D

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值