好羞愧啊最近一直在刷水。。。

题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大。

其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为开头的最长下降子序列长度。

首先$a_i = x$一定是从一个$a_j = x-1$转移而来的。这里让$a_i$从所有$a_j = x-1$的$a_j$里$c_j$最小的转移而来,一定不会有更优的转移。

因为这样它还可以和其它$a_j$做出至少1的贡献。那么我们由$i$向$j$连边。这样会形成一棵以0为根的树,后连边的点先遍历,令$c_j $等于dfs序。这样得到的序列就可以满足题意。求一遍$b$就行了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. inline int read(){
  5. int r=,c=getchar();
  6. while(!isdigit(c))c=getchar();
  7. while(isdigit(c))
  8. r=r*+c-'',c=getchar();
  9. return r;
  10. }
  11. struct Edge{
  12. int to,nxt;
  13. }e[N*];
  14. int head[N],cnt=;
  15. void add(int u,int v){
  16. e[cnt]=(Edge){v,head[u]};
  17. head[u]=cnt++;
  18. }
  19. int a[N],las[N],n,dc;
  20. void dfs(int u){
  21. a[u]=++dc;
  22. for(int i=head[u];i;i=e[i].nxt)
  23. dfs(e[i].to);
  24. }
  25. int b[N],c[N];
  26. void upd(int x,int v){
  27. for(int i=x;i<=n;i+=i&-i)
  28. c[i]=max(c[i],v);
  29. }
  30. int ask(int x){
  31. int ret=;
  32. for(int i=x;i;i-=i&-i)
  33. ret=max(ret,c[i]);
  34. return ret;
  35. }
  36. int main(){
  37. n=read();
  38. for(int i=;i<=n;i++){
  39. int x=read();
  40. add(las[x-],i);
  41. las[x]=i;
  42. }
  43. dfs();
  44. long long ans=;
  45. for(int i=n;i;i--){
  46. b[i]=ask(a[i]-)+;
  47. ans+=1ll*b[i];
  48. upd(a[i],b[i]);
  49. }
  50. cout<<ans;
  51. }

[bzoj5158][Tjoi2014]Alice and Bob的更多相关文章

  1. BZOJ5158 [Tjoi2014]Alice and Bob 【贪心 + 拓扑】

    题目链接 BZOJ5158 题解 题中所给的最长上升子序列其实就是一个限制条件 我们要构造出最大的以\(i\)开头的最长下降子序列,就需要编号大的点的权值尽量小 相同时当然就没有贡献,所以我们不妨令权 ...

  2. [TJOI2014]Alice and Bob[拓扑排序+贪心]

    题意 给出一个序列的以每一项结尾的 \(LIS\) 的长度a[],求一个序列,使得以每一项为开头的最长下降子序列的长度之和最大. \(n\leq 10^5\) . 分析 最优解一定是一个排列,因为如果 ...

  3. [BZOJ 5158][Tjoi2014]Alice and Bob

    传送门 \(\color{green}{solution}\) 贪心 /************************************************************** P ...

  4. [TJOI2014] Alice and Bob

    非常好的一道思维性题目,想了很久才想出来qwq(我好笨啊) 考虑a[]数组有什么用,首先可以yy出一些性质 (设num[i]为原来第i个位置的数是什么 , 因为题目说至少有一个排列可以满足a[],所以 ...

  5. 关于TJOI2014的一道题——Alice and Bob

    B Alice and Bob •输入输出文件: alice.in/alice.out •源文件名: alice.cpp/alice.c/alice.pas • 时间限制: 1s 内存限制: 128M ...

  6. 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  7. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  8. Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...

  9. sdutoj 2608 Alice and Bob

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2608 Alice and Bob Time L ...

随机推荐

  1. selenium + python(鼠标操作)

    关于最近学习selenium自动化测试鼠标操作的一些总结 常见的鼠标操作

  2. Gym - 101334E 多叉树遍历

    题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯: 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点 ...

  3. AFN 切换BaseUrl

    在某个特定的接口需要修改baseurl时: 直接使用kvc: [_sessionManager setValue:[NSURL URLWithString:NEW_BASE_URL] forKey:@ ...

  4. HDU 1083 Courses 【二分图完备匹配】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Courses Time Limit: 20000/10000 MS (Java/Others)  ...

  5. sst上传和下载码云

    第一次 Team-----share---->Add----->commit-------remote----->pull 第二次 直接share开始.

  6. @WebListener 注解方式实现监听(eclipse和idea)

    eclipse进行演示: 1.创建 Dynamic Web Project ,Dynamic Web module version选择3.0 2.在自动生成 的web.xml配置,增加 metadat ...

  7. 【洛谷P1288】取数游戏II

    取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...

  8. [luoguP1443]马的遍历

    首先来看一下题目描述: 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋 ...

  9. Android学习笔记_25_多媒体之在线播放器

    一.布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  10. H5面试题整理

    1.新的HTML5文档类型和字符集是? 文档类型:<!doctype html> 使用UTF-8编码示例:<meta charset="UTF-8"> 2. ...