4553: [Tjoi2016&Heoi2016]序列

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

HINT

Source

用$mn_i$和$mx_i$表示$a_i$可能改变的最小/最大值,有$$j<i \& a_j \leq mn_i \& mx_j \leq a_i$$可以看出是三维偏序,CDQ分治解决。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=l; i<=r; i++)
 4 using namespace std;
 5
 6 const int N=100100;
 7 int n,m,x,y,ans,c[N],f[N];
 8 struct P{ int a,mn,mx,x,y,id; }q[N],p[N];
 9
10 bool cmp(P a,P b){ return (a.x==b.x)?(a.y==b.y)?a.id<b.id:a.y<b.y:a.x<b.x; }
11
12 void add(int x,int k){ for (; x<=100000; x+=x&-x) c[x]=k?max(c[x],k):0; }
13 int que(int x){ int res=0; for (; x; x-=x&-x) res=max(res,c[x]); return res; }
14
15 void solve(int l,int r){
16     if (l==r){ f[l]=max(f[l],1); return; }
17     int mid=(l+r)>>1; solve(l,mid);
18     rep(i,l,r)
19         if (q[i].id<=mid) p[i].x=q[i].a,p[i].y=q[i].mx,p[i].id=q[i].id;
20                         else p[i].x=q[i].mn,p[i].y=q[i].a,p[i].id=q[i].id;
21     sort(p+l,p+r+1,cmp);
22     rep(i,l,r) if (p[i].id<=mid) add(p[i].y,f[p[i].id]); else f[p[i].id]=max(f[p[i].id],que(p[i].y)+1);
23     rep(i,l,r) if (p[i].id<=mid) add(p[i].y,0);
24     solve(mid+1,r);
25 }
26
27 int main(){
28     freopen("bzoj4553.in","r",stdin);
29     freopen("bzoj4553.out","w",stdout);
30     scanf("%d%d",&n,&m);
31     rep(i,1,n) scanf("%d",&q[i].a),q[i].mn=q[i].mx=q[i].a,q[i].id=i;
32     rep(i,1,m) scanf("%d%d",&x,&y),q[x].mn=min(q[x].mn,y),q[x].mx=max(q[x].mx,y);
33     solve(1,n);
34     rep(i,1,n) ans=max(ans,f[i]);
35     printf("%d\n",ans);
36     return 0;
37 }

转载于:https://www.cnblogs.com/HocRiser/p/8579553.html

[BZOJ4553][TJOI2016HEOI2016]序列(CDQ分治)相关推荐

  1. bzoj4553 [Tjoi2016Heoi2016]序列 树状数组(区间最大值)+cqd

    [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1006  Solved: 464 [Submit ...

  2. P4093-[HEOI2016/TJOI2016]序列【CDQ分治,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P4093 题目大意 nnn个数字,每次有一个数字可能和原序列不同,但最多只有一个不同. 求所有情况下都满足的最长不降 ...

  3. [学习笔记]CDQ分治

    分治,考虑前一半对后一半的影响. (和一般分治不太相同的思想是,一般分治不分谁对谁的影响,跨mid的都要统计.(全局变量统计) 而CDQ貌似要落脚到前一半对后一半的影响上,也就是贡献在后一半统计,由前 ...

  4. 【教程】简易CDQ分治教程学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  5. 【BZOJ3745】Norma(CDQ分治)

    [BZOJ3745]Norma(CDQ分治) 题面 BZOJ 洛谷 题解 这种问题直接做不好做,显然需要一定的优化.考虑\(CDQ\)分治. 现在唯一需要考虑的就是跨越当前中间节点的所有区间如何计算答 ...

  6. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...

  7. 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治

    [BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...

  8. BZOJ 4553: [Tjoi2016Heoi2016]序列

    #Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了 ...

  9. 二维LIS(CDQ分治)

    题目描述 给定一个长度为N的序列S,S的每个元素pi是一个二元组(xi,yi),定义pi<pj当且仅当xi<xj并且yi<yj,求S的最长上升子序列长度 输入格式 第一行一个N,表示 ...

最新文章

  1. (C#)利用反射动态调用类成员[转载]
  2. STL之vetor 排序
  3. 【linux】sed -e 's/-//g'
  4. 使用MyEclipse开发中的编码设置
  5. 数据分析Power BI数据建模教程(三)——如何优化数据模型
  6. 互联网运营数据分析(3): 留存分析
  7. shell循环读文件 Linux脚本读文件
  8. 小白看完都学会了!Jetpack-MVVM-高频提问和解答,面试建议
  9. oracle临时表空间组
  10. 数据库之SQL更新语句中update set from用法
  11. aac +sbr +ps
  12. 新房和二手房的优缺点
  13. CentOs网络管理:ifconfig家族,iproute家族及配置文件
  14. JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象
  15. 产品通过WHQL认证后的好处
  16. su - oracle和su oracle 的区别
  17. 常用的几种时间系统GMT、UTC等以及使用Python代码GPS时间转UTC时间
  18. 步进控制薄图modbus通讯1200PLC通讯威纶通
  19. 从测计----深度与宽度之深度1
  20. Android 下获取 ICCID、电话号码 的两种方式

热门文章

  1. deeplearning
  2. 机器学习和深度学习学习资料
  3. 纯CSS实现立方体旋转
  4. 51nod挑的部分5级题
  5. 记一次意外的自定义控件
  6. Django使用缓存笔记
  7. Ganglia 应用实践
  8. 实验九:异常的抛出、捕获并处理
  9. 网站漏洞修复公司处理网站被篡改跳转到其他网站的解决办法
  10. 聊聊resilience4j的CircuitBreakerStateMachine