bzoj4553 [Tjoi2016&Heoi2016]序列 树状数组(区间最大值)+cqd
[Tjoi2016&Heoi2016]序列
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1006 Solved: 464
[Submit][Status][Discuss]
Description
佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他。玩具上有一个数列,数列中某些项的值
可能会变化,但同一个时刻最多只有一个值发生变化。现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你
,能否选出一个子序列,使得在任意一种变化中,这个子序列都是不降的?请你告诉她这个子序列的最长长度即可
。注意:每种变化最多只有一个值发生变化。在样例输入1中,所有的变化是:
1 2 3
2 2 3
1 3 3
1 1 31 2 4
选择子序列为原序列,即在任意一种变化中均为不降子序列在样例输入2中,所有的变化是:3 3 33 2 3选择子序列
为第一个元素和第三个元素,或者第二个元素和第三个元素,均可满足要求
Input
输入的第一行有两个正整数n, m,分别表示序列的长度和变化的个数。接下来一行有n个数,表示这个数列原始的
状态。接下来m行,每行有2个数x, y,表示数列的第x项可以变化成y这个值。1 <= x <= n。所有数字均为正整数
,且小于等于100,000
Output
输出一个整数,表示对应的答案
Sample Input
3 4
1 2 3
1 2
2 3
2 1
3 4
1 2 3
1 2
2 3
2 1
3 4
Sample Output
3
题解:
设a,b,c分别为位置,值,最大最小值,
n^2 dp是十分好理解的,对于i,j(i<j)只需要满足x.b<y.c.mi && x.c.mx<y.b 即可,这样就转移然后就n^2
正解的话cdq可以写,对于第一维,先排序,然后对l,mid,以b为关键字排序,升序。
然后按照x.b<y.c.mi 这个标准,将x.c.mx的位置中放入其ans,然后只需要在树状数组中一y.b去寻找最大值
就好了,答案是最大值+当前已经有的答案。
最后输出即可。
代码懒得写了。