5157: [Tjoi2014]上升子序列

题目:传送门


题解:

   学一下nlogn的树状数组求最长上生子序列就ok(%爆大佬

   离散化之后,用一个数组记录一下,直接树状数组做

   吐槽:妈耶...一开始不会lower_bound 的蒟蒻用手打二分离散化...结果去重了...然后屁颠屁颠的学了lower_bound(很好用!)


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define mod 1000000007
using namespace std;
int n,a[],wa[],s[];
int lowbit(int x){return x&-x;}
void add(int x,int p)
{
while(x<=n)
{
s[x]=(s[x]+p)%mod;
x+=lowbit(x);
}
}
int getsum(int x)
{
int ans=;
while(x)
{
ans=(ans+s[x])%mod;
x-=lowbit(x);
}
return ans;
}/*
int LS(int x)
{
int l,r,mid,ans;
l=1,r=n;
while(l<=r)
{
mid=(l+r)/2;
if(wa[mid]<=x)
{
l=mid+1;
ans=mid;
}
else r=mid-1;
}
return ans;
}*/
int f[],last[],w[];
int main()
{
scanf("%d",&n);for(int i=;i<=n;i++)scanf("%d",&a[i]),wa[i]=a[i];
sort(wa+,wa+n+);int sum=;memset(f,,sizeof(f));
for(int i=;i<=n;i++)
{
a[i]=lower_bound(wa+,wa+n+,a[i])-wa;if(w[a[i]]==)sum++;
last[i]=w[a[i]];w[a[i]]=i;//链表记录上次影响的位置
}
for(int i=;i<=n;i++)
{
f[i]=getsum(a[i]-)+;//这个数能贡献的上升子序列个数
add(a[i],(f[i]-f[last[i]]+mod)%mod);//减去重复的贡献
}
int ans=getsum(n);
printf("%d\n",(ans-sum+mod)%mod);
return ;
}

最新文章

  1. TortoiseGit:记住用户名和密码
  2. Android菜鸟成长记13 -- 初识application
  3. mentohust 你让我如何说你是好呢?
  4. Linux下集群的搭建
  5. 《day18_String练习_基本类型包装类_集合入门》
  6. zedboard 驱动理解
  7. DOCTYPE, HTML和XHTML, Strict DTD和Transitional DTD, Quirks Mode和Standard Mode
  8. 【原创】leetCodeOj --- Largest Number 解题报告
  9. 常见C/C++笔试、面试题(二)
  10. Swift 3.0在集合类数据结构上的一些新变化
  11. c++中函数的内存注意项
  12. SuperMap iObject .NET开发完成后私有部署,打包安装
  13. Codeforces Round #412 C. Success Rate
  14. 离线安装.NET 3.5
  15. 手把手教你整合最优雅SSM框架
  16. windows 常用快捷键和dos命令
  17. ThinkJava-容器深入研究
  18. spark SQL学习(数据源之json)
  19. 牛客网提高组模拟赛第五场 T1同余方程(异或)(位运算)
  20. 116.001 - 爱折腾之用 Kindle 读学术论文是什么体验?

热门文章

  1. PHP生成二维码的2种方式
  2. ffmpeg键盘命令响应程序详解
  3. 继承TabActivity后不执行onBackPressed()里的方法
  4. Android饼图的简单实现
  5. .net 三大核心对象
  6. LeetCode(17)Letter Combinations of a Phone Number
  7. 2、Attentive Group Recommendation----注意力集中的群组推荐
  8. IOS - 总结(网络状态变更)
  9. -java转json hibernate懒加载造成的无限递归问题
  10. linux系统添加环境变量,node.js forever 守护进程添加环境变量