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 ;
}

bzoj5157: [Tjoi2014]上升子序列(树状数组LIS)的更多相关文章

  1. 【bzoj5157】[Tjoi2014]上升子序列 树状数组

    题目描述 求一个数列本质不同的至少含有两个元素的上升子序列数目模10^9+7的结果. 题解 树状数组 傻逼题,离散化后直接使用树状数组统计即可.由于要求本质不同,因此一个数要减去它前一次出现时的贡献( ...

  2. CF452F Permutations/Luogu2757 等差子序列 树状数组、Hash

    传送门--Luogu 传送门--Codeforces 如果存在长度\(>3\)的等差子序列,那么一定存在长度\(=3\)的等差子序列,所以我们只需要找长度为\(3\)的等差子序列.可以枚举等差子 ...

  3. bzoj 2124 等差子序列 树状数组维护hash+回文串

    等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 1919  Solved: 713[Submit][Status][Discuss] Desc ...

  4. 【BZOJ2124】等差子序列 树状数组维护hash值

    [BZOJ2124]等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N ...

  5. Maximum Subsequence Sum【最大连续子序列+树状数组解决】

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...

  6. codeforces 629D 树状数组+LIS

    题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...

  7. hdu 5773 The All-purpose Zero 最长上升子序列+树状数组

    题目链接:hdu 5773 The All-purpose Zero 官方题解:0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的. 因此我们可以把0拿出来,对剩下的做O(nl ...

  8. BZOJ 3173 最长上升子序列(树状数组+二分+线段树)

    给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之 ...

  9. BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)

    能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y ...

随机推荐

  1. 2016.3.17__ JavaScript基础_1__第十二天

    Javascript基础 首先说声抱歉. 今日涉及内容难易度不统一,所以很多比較基础的属性直接通过思维导图展示了. 同一时候须要注意,今日思维导图中的内容和笔记中并非一一相应的,请读者自行对比查看. ...

  2. 终端安全工具 gartner 排名

    Reviews for Endpoint Detection and Response Solutions What is Endpoint Detection and Response Soluti ...

  3. [Javascript] 层控制(隐藏、显示、卷起、展开)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. SignalR——聊天室的实现

    秒懂——SignalR ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连 ...

  5. Core Java(三)

    三.运算符&流程控制 运算符---http://blog.csdn.net/typa01_kk/article/details/45000535 在一个程序执行的过程中,各条语句的执行顺序对程 ...

  6. Activity全屏沉浸状态

    public class MainActivity extends AppCompatActivity { private static final String TAG = "MainAc ...

  7. Windows下安装XAMPP,Wordpress

    配置XAMPP:   1.下载:https://www.apachefriends.org/zh_cn/download.html(下载速度日了狗!)  2.安装XAMPP;  3.启动apache, ...

  8. (2)RDD的基本操作

    一.map操作,map(Transform) 二.collect操作,collect(Action) 三.使用PairRDD来做计算,类似key-value结构 采用groupByKey来.将资料按照 ...

  9. JS 将有父子关系的数组转换成树形结构数据

    将类似如下数据转换成树形的数据 [{ id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1', ...

  10. linux查看前几条命令记录

    1.按上下箭头键2.history|more分页显示3.vi /etc/profile找HISTSIZE=1000,说明你最多能存1000条历史记录.4.!!执行最近执行的命令5.history|he ...