bzoj4553 [Tjoi2016&Heoi2016]序列 树状数组(区间最大值)+cqd

[Tjoi2016&Heoi2016]序列

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 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

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去寻找最大值
    就好了,答案是最大值+当前已经有的答案。
    最后输出即可。
    代码懒得写了。
 
posted @ 2017-12-05 09:10  Kaiser-  阅读(202)  评论(0编辑  收藏  举报