Description

Solution

定义dp[i][j]为在1到i个数中选了j个数,并且保证选了i的选法总数。

dp[i][j]为所有满足A[k]>A[i]的k(k<i)的dp[k][j-1]之和。在处理完dp[i][j]后,在树状数组里A[i]位置填上dp[i][j-1]的值就好。这样可以优化一下复杂度。[A可能要离散化一下]

然后,容斥大法好~

定义g[x]为最终序列长度为x的方案数。由于x是从大变小,所有的g[i]都是已经处理完毕的了。

(似乎还有一种不用n2操作,直接扫一遍就好的方法,不知道是不是二项式反演)

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int mod=1e9+;
typedef long long ll;
int n,a[],t[],rk[];
bool cmp(int x,int y){return a[x]<a[y];}
ll dp[][],g[]; ll fac[],inv[];
void pre()
{
fac[]=fac[]=inv[]=inv[]=;
for (int i=;i<=n;i++)
{
fac[i]=fac[i-]*i%mod;
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
for (int i=;i<=n;i++) inv[i]=inv[i]*inv[i-]%mod;
}
ll C(int x,int y){return fac[y]*inv[x]%mod*inv[y-x]%mod;} ll tree[];
void add(int id,ll x){for(;id<=n;id+=id&-id) tree[id]+=x,tree[id]%=mod;}
ll query(int id){ll re=;for(;id;id-=id&-id) re+=tree[id],re%=mod;return re;}
int main()
{
scanf("%d",&n);
pre();
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);t[i]=i;
}
sort(t+,t+n+,cmp);
int js=;
a[]=-;
for (int i=;i<=n;i++)
{
if (a[t[i]]!=a[t[i-]]) js++;
rk[t[i]]=js;
}
for (int i=;i<=n;i++) dp[i][]=;
for (int j=;j<=n;j++)
{
memset(tree,,sizeof(tree));
add(rk[j-],dp[j-][j-]);
for (int i=j;i<=n;i++)
{
dp[i][j]=query(rk[i]);
add(rk[i],dp[i][j-]);
}
} g[n]=dp[n][n];
for (int i=n-;i;i--)
{
for (int j=;j<=n;j++) g[i]+=dp[j][i]*fac[n-i]%mod,g[i]%=mod;
for (int j=i+;j<=n;j++)
g[i]-=C(i,j)*g[j]%mod*fac[j-i]%mod,g[i]%=mod;
}
ll ans=;
for (int i=;i<=n;i++) ans=(ans+g[i]+mod)%mod;
cout<<ans;
}

[2016北京集训测试赛7]isn-[树状数组+dp+容斥]的更多相关文章

  1. [2016北京集训测试赛15]statement-[线段树+拆环]

    Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...

  2. hdu 5792(树状数组,容斥) World is Exploding

    hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...

  3. Luogu4528 CTSC2008 图腾 树状数组、容斥

    传送门 设$f_i$表示$i$排列的数量,其中$x$表示不确定 那么$$ans=f_{1324}-f_{1432}-f_{1243}=(f_{1x2x}-f_{1423})-(f_{14xx}-f_{ ...

  4. [2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]

    Description Solution 哇真的异常服气..线段树都可以搞合并和拆分的啊orzorz.神的世界我不懂 Code #include<iostream> #include< ...

  5. 2016北京集训测试赛(十一)Problem C: 树链问题

    Solution 智障暴力题, 每个点维护一下子树信息, 树剖就好了. 我居然还傻了写了一发毛毛虫... #include <cstdio> #include <cctype> ...

  6. 2016北京集训测试赛(十七)Problem C: 数组

    Solution 线段树好题. 我们考虑用last[i]表示\(i\)这个位置的颜色的上一个出现位置. 考虑以一个位置\(R\)为右端点的区间最远能向左延伸到什么位置: \(L = \max_{i \ ...

  7. 2016北京集训测试赛(十七)Problem B: 银河战舰

    Solution 好题, 又是长链剖分2333 考虑怎么统计答案, 我场上的思路是统计以一个点作为结尾的最长上升链, 但这显然是很难处理的. 正解的方法是统计以每个点作为折弯点的最长上升链. 具体的内 ...

  8. 2016北京集训测试赛(十六)Problem A: 任务安排

    Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...

  9. BZOJ 4543 2016北京集训测试赛(二)Problem B: thr 既 长链剖分学习笔记

    Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...

随机推荐

  1. oc js 调用 函数调用栈

    //定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口 @protocol PersonProtocol <JSExport> @proper ...

  2. 27、springboot整合RabbitMQ(1)

    RabbitMQ整合 使用dockers下载带management的版本,该版本是带web界面的,可操作性比较强

  3. WEB安全 asp+access注入

    asp+access注入 数据库 (access数据库没有数据库名) 表名 字段(列名) 记录(行,内容) 注入常用函数: top n 表示查询结果的第n个记录 len() 函数返回文本字段中值的长度 ...

  4. Dubbo实践(七)扩展点

    与JDK的SPI机制类似,Dubbo也在META-INF路径下定义了多种扩展接口.只是JDK SPI机制是Java后台帮你实现读取文件并对接具体的实现类,而Dubbo是自己去读文件. 扩展点配置 扩展 ...

  5. Dubbo实践(一)入门示例

    dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候 ...

  6. rhel install java jdk

    Linux安装JDK完整步骤 1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1. ...

  7. C++设计一个不能被继承的类

    1. 方法一 将构造函数和析构函数设置为私有函数,重新定义公有的静态函数来创建和释放类. #include "stdafx.h" #include <iostream> ...

  8. Java Activiti 流程审批 后台框架源码 springmvc SSM 工作流引擎

    即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 工作流模块-------------------------------------------------------- ...

  9. react 配置开发环境

    一:先自行下载安装node和npm 二:cnpm install create-react-app -g 三:create-react-app my-project 四:cd my-project  ...

  10. layDay日期格式不合法报错解决

    报错内容如下: Uncaught TypeError: Cannot read property 'appendChild' of undefined 相关报错内容的行代码如下 即使日期格式拼接正确也 ...