强军如歌(strong)
强军如歌(strong)
题目描述
给定一个NN个数的序列AA,如果序列AA不是非降序的,你需要在其中选择一个数删掉,不断重复这个操作直到序列AA非降。求有多少种不同的删数方案。注意:删掉的数的集合相同,但是删数的顺序不同,视作不同的删数方案。
输入
第一行一个数NN。
接下来一行NN个正整数,用空格隔开,第ii个数表示Ai。
输出
一行一个整数表示答案对1000000007取模的结果。
solution
首先我们考虑不管删数顺序,枚举出剩下的不降序列。
假设长度为l
那么这时候的删数方案为(n-l)!
我们考虑一种不合法的删数方案:再删除第l个数前,序列一定要是不降的。
也就是每一个长度为l+1的不降序列,都对应着l+1个不合法方案。
用树状数组求出长度为l的不降子序列个数
这样就可以快速统计了
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 2005
#define mod 1000000007
#define ll long long
using namespace std;
int n,Max,a[maxn];
ll f[maxn][maxn],tree[maxn],ans[maxn],h[maxn];
int ask(int i){
ll sum=0;
for(;i;i-=i&-i)sum=(sum+tree[i])%mod;
return sum;
}
void jia(int i,ll v){
for(;i<=Max;i+=i&-i)tree[i]=(tree[i]+v)%mod;
}
int main()
{
cin>>n;
h[0]=1;for(int i=1;i<=n;i++)h[i]=(h[i-1]*i)%mod;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
Max=max(a[i],Max);
}
for(int i=1;i<=n;i++)f[i][1]=1;ans[1]=h[n];
for(int i=2;i<=n;i++){
for(int j=1;j<=Max;j++)tree[j]=0;
for(int j=1;j<=n;j++){
f[j][i]=ask(a[j]);
jia(a[j],f[j][i-1]);
}
ll sum=0;
for(int j=1;j<=n;j++)sum=(sum+f[j][i])%mod;
ans[i]=(sum*h[n-i])%mod;
}
ll A=0;
for(int i=1;i<=n;i++){
A=A+ans[i]-(ans[i+1]*(i+1))%mod;A%=mod;
}
A=(A%mod+mod)%mod;
cout<<A<<endl;
return 0;
}
强军如歌(strong)的更多相关文章
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- h1、h2、h3标签及strong标签对页面seo的影响
今天和大家来聊下h1,h2,h3,strong几个标签,在网页中的使用对页面seo的影响,也阐述了个人的一些想法. 首先简要讲下H标签及strong标签的含义:<h1>.<h2> ...
- @property中的copy.strong.weak总结
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" ...
- [LeetCode] Strong Password Checker 密码强度检查器
A password is considered strong if below conditions are all met: It has at least 6 characters and at ...
- NSString属性什么时候用copy,什么时候用strong?
我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢 ...
- iOS 浅谈:深.浅拷贝与copy.strong
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyStri ...
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...
- 【iOS atomic、nonatomic、assign、copy、retain、weak、strong】的定义和区别详解
一.atomic与nonatomic 1.相同点 都是为对象添加get和set方法 2.不同点 atomic为get方法加了一把安全锁(及原子锁),使得方法get线程安全,执行效率慢 nonatomi ...
- strong,weak, retain, assign的区别
strong,weak, retain, assign的区别 strong与weak是由ARC新引入的对象变量属性 xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain ...
随机推荐
- C#+Winform记事本程序
第17章 记事本 如何使用Visual C# 2010设计一个Windows应用程序——记事本,学习,可以进一步掌握MenuStrip(菜单).ToolStrip(工具栏).RichTextBox(高 ...
- Shell脚本使用汇总整理
Shell脚本使用汇总整理 一.Shell脚本常用的头部格式: 头部的作用就是告知linux此脚本的类型: 常用的头部格式如下:(/bin/bash,是bash的路径,如果不知道路径可以通过which ...
- java中substring()、charAt()、indexOf() (2013-05-05-bd 写的日志迁移
substring 1. public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串, 该子字符串始于指定索引处的字符,一直 ...
- 图解HTTP总结(3)——HTTP报文内的HTTP信息
HTTP通信过程包括从客户端发往服务端的请求及从服务器端返回客户端的响应. 用于HTTP协议交互的信息被称为HTTP报文.客户端的HTTP报文叫做请求报文,服务器端的叫做响应报文.HTTP报文本身是多 ...
- 守护进程,进程安全,IPC进程间通讯,生产者消费者模型
1.守护进程(了解)2.进程安全(*****) 互斥锁 抢票案例3.IPC进程间通讯 manager queue(*****)4.生产者消费者模型 守护进程 指的也是一个进程,可以守护着另一个进程 一 ...
- 数据分析处理库Pandas——merge操作
有一列列名相同值也相同 有两列列名相同值也相同 按其中一列合并 按两列合并 有一列列名相同值也相同,有一列列名相同值不相同,按两列合并 列名相同值不相同的行删掉 保留所有行 保留所有行并显示合并后该值 ...
- 【异常】The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
异常错误:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone ...
- 17-比赛1 F - 较小元素 Weak in the Middle (set)
Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton. He ...
- 通过IIS共享文件夹来实现静态资源"本地分布式"部署
以下以文件型数据库(如sqlite)为例 楼主话:以下内容,若有不专业处,大胆喷,虚心求教. 起因:要进行一个项目的分布式部署,而这个项目所涉及的其中一个数据库为sqlite(经测试,同为文件型数据库 ...
- java程序——输入判断成绩
import java.util.*; class ExceptionOut extends Exception{ } public class Score { public static void ...