正题

题目链接:https://www.luogu.com.cn/problem/P3971


题目大意

一个1∼n1\sim n1∼n的一个排列,设aia_iai​表示以iii结尾的最长上升子序列长度,bib_ibi​表示以iii开头的最长下降子序列长度。

给出序列aaa求序列bbb的最大和。

1≤n≤1051\leq n\leq 10^51≤n≤105


解题思路

考虑数组aaa带来的限制

  • 对于一个ai=aj=w(i<j)a_i=a_j=w(i<j)ai​=aj​=w(i<j)那么有xi>xjx_i>x_jxi​>xj​
  • 对于一个aj=w+1a_j=w+1aj​=w+1前一个最近的ai=wa_i=wai​=w那么有xi<xjx_i<x_jxi​<xj​

第一个限制其实不用管,因为如果我们要最优,一定会满足那个限制。

考虑第二个限制,我们将iii向jjj连一条边,这样我们就可以得到一棵树(把000视为虚根的话)。

那么我们子节点的权值一定要比父节点的大,然后在满足这个的前提下我们优先扩展编号大的节点就好了。

也就是从大到小跑一遍dfsdfsdfs序就可以得到xxx数组。

然后用树状数组统计一下答案。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define lowbit(x) (x&-x)
using namespace std;
const int N=1e5+10;
struct node{int to,next;
}a[N];
int n,tot,cnt,dfn[N],ls[N],t[N],las[N];
long long ans;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(int x){dfn[x]=++cnt;for(int i=ls[x];i;i=a[i].next)dfs(a[i].to);return;
}
void Change(int x,int val){while(x<=n){t[x]=max(t[x],val);x+=lowbit(x);}return;
}
int Ask(int x){int ans=0;while(x){ans=max(ans,t[x]);x-=lowbit(x);}return ans;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);addl(las[x-1],i);las[x]=i; }cnt=-1;dfs(0);for(int i=n;i>=1;i--){int t=Ask(dfn[i])+1;ans+=t;Change(dfn[i],t);}printf("%lld\n",ans);return 0;
}

P3971-[TJOI2014]Alice and Bob【贪心】相关推荐

  1. [TJOI2014] Alice and Bob

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

  2. [bzoj5158][Tjoi2014]Alice and Bob

    好羞愧啊最近一直在刷水... 题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大. 其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为 ...

  3. HDU4268 2012ACM长春赛区网络赛 Alice and Bob

    题目:HDU4268(贪心) 题意是Alice和Bob都有N张卡片,卡片各有尺寸,Alice拿自己的卡片分别去盖Bob的,给出每张卡片的尺寸,问最多可以盖住多少张. 先说一下我错误的解题方法,主要思想 ...

  4. Sicily1798. Alice and Bob[策略问题]

    [原题描述] Description Bob is very famous because he likes to play games. Today he puts a chessboard in ...

  5. SDUT2608(Alice and Bob)

    题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynom ...

  6. NYOJ 1053 Alice and Bob (N)

    Alice and Bob (N) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 也不知道是谁规定的,Alice 和 Bob总是有一堆做不完的事,和一堆奇葩想法,而且重 ...

  7. NYOJ练习题 又见Alice and Bob

    又见Alice and Bob 时间限制:1000 ms  |  内存限制:65535 KB 描述 集训生活如此乏味,于是Alice和Bob发明了一个新游戏.规则如下:首先,他们得到一个集合包含n个特 ...

  8. 牛客 - Alice and Bob(尺取+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...

  9. 2021牛客暑期多校训练营1 A.Alice and Bob 博弈 SG函数

    传送门 文章目录 题意: 思路: 题意: 有两堆石子,两个人每次可以进行如下操作:从某一堆狮子中拿出x(x>0)x(x>0)x(x>0)个,从另一堆石子中拿出s∗x(s>=0) ...

  10. Alice and Bob

    Alice and Bob 题意: 两人博弈,每次一个人从一堆中拿k个,同时从另一堆拿k * s(s>=0)个,问谁先不能拿 10000组数据,N<=5000 题解: (x,y)表示第一堆 ...

最新文章

  1. Swift 字典转数组
  2. 2007年3月东北微软技术活动预告
  3. ubuntu15.10安装wireshark
  4. minisap的安装
  5. C++学习笔记(八)——内联函数
  6. Python偏函数应用举例-路灯指示牌
  7. Java 解析 XML
  8. Fleury算法 求欧拉回路
  9. 定档6月11日 诺基亚手机新品发布亮点抢先看
  10. npm,umi,yarn
  11. Linux 命令(137)—— strace 命令
  12. Hadoop MapReduce编程 API入门系列之wordcount版本3(七)
  13. delphi xe6 让 ListView 在 Android 可回弹[根据龟山阿卍原创修改为xe6版本]
  14. AWVS 13 Docker版本(破解后)
  15. java读取修改文件内容_JAVA读取文件指定内容进行修改
  16. 有哪些公共管理或行政管理学习帮助较大的外文期刊?
  17. Intel无线网卡AX210驱动bug
  18. 男人。。。女人。。。经典语录
  19. 你真的了解宏吗:浅谈宏定义(#define语句)
  20. bi导入数据失败 power_如何用PowerBI导入网页数据

热门文章

  1. java继承接口和泛型,JavaSE习题 继承接口和泛型
  2. vue 一个页面有点请求需要同时发送_前端性能优化,这些你都需要知道
  3. 小米8对一加6打开软件速度测试,买一加6还是小米8?小米8和一加6区别对比
  4. mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
  5. 拆分路径 java_JAVA 类文件中的路径如何拆分和替换
  6. 问题 D: 二叉树求高度
  7. 计算机检测维修与数据恢复课件,2017年全国职业院校技能大赛中职组“计算机检测维修与数据恢复”赛项说明会ppt课件.ppt...
  8. C++ class类 实现搜索二叉树(BST)
  9. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)
  10. 最短路(遍历边)计蒜客—DD坐地铁