Problem 2236 第十四个目标

Accept: 4    Submit: 6
Time Limit: 1000 mSec    Memory Limit : 32768 KB

Problem Description


暮警官、妃英里、阿笠博士等人接连遭到不明身份之人的暗算,柯南追踪伤害阿笠博士的凶手,根据几起案件现场留下的线索发现凶手按照扑克牌的顺序行凶。在经
过一系列的推理后,柯南发现受害者的名字均包含扑克牌的数值,且扑克牌的大小是严格递增的,此外遇害者与毛利小五郎有关。

为了避免下一个遇害者的出现,柯南将可能遭到暗算的人中的数字按关联程度排列了出来,即顺序不可改变。柯南需要知道共有多少种可能结果,满足受害人名字出现的数字严格递增,但是他柯南要找出关键的证据所在,所以这个任务就交给你了。

(如果你看不懂上面在说什么,这题是求一个数列中严格递增子序列的个数。比如数列(1,3,2)的严格递增子序列有(1)、(3)、(2)、(1,3)、(1,2),共5个。长得一样的但是位置不同的算不同的子序列,比如数列(3,3)的答案是2。)

Input

多组数据(<=10),处理到EOF。

第一行输入正整数N(N≤100 000),表示共有N个人。

第二行共有N个整数Ai(1≤Ai≤10^9),表示第i个人名字中的数字。

Output

每组数据输出一个整数,表示所有可能的结果。由于结果可能较大,对1 000 000 007取模后输出。

Sample Input

3
1 3 2

Sample Output

5

Source

福州大学第十三届程序设计竞赛

思路:dp+树状数组优化+离散化;
状态转移方程:dp[i]=sum(dp[j]);a[j]<a[i];
dp[i]表示以a[i]结束呈严格递增的个数;因为每次都要到前面找比当前小的数,所以用树状数组优化下就行。
复杂度为n*(logn);
 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<math.h>
7 using namespace std;
8 typedef long long LL;
9 const int N=1e9+7;
10 LL dp[100005];
11 LL bit[100005];
12 int ak[100005];
13 typedef struct pp
14 {
15 int x;
16 int id;
17 } ss;
18 ss ans[100005];
19 bool cmp(pp n, pp m)
20 {
21 return n.x<m.x;
22 }
23 void add(int i,int x,int n);
24 LL BIT(int i);
25 int main(void)
26 {
27 int i,j ,k;
28 int s;int n;
29 while(scanf("%d",&n)!=EOF)
30 {
31 int m;
32 for(i=1; i<=n; i++)
33 {
34 scanf("%d",&ans[i].x);
35 ans[i].id=i;
36 }
37 sort(ans+1,ans+1+n,cmp);
38 ak[ans[1].id]=1;
39 int cn=1;
40 int dd=ans[1].x;
41 for(i=2; i<=n; i++)
42 {
43 if(dd!=ans[i].x)
44 {
45 cn++;
46 dd=ans[i].x;
47 }
48 ak[ans[i].id]=cn;
49 }
50 memset(bit,0,sizeof(bit));
51 memset(dp,0,sizeof(dp));
52 for(i=1; i<=n; i++)
53 {
54 dp[i]=BIT(ak[i]-1);
55 dp[i]=(dp[i]+1)%N;
56 add(ak[i],dp[i],cn);
57 }
58 LL sum=0;
59 for(i=1; i<=n; i++)
60 {
61 sum=(sum+dp[i])%N;
62 }
63 printf("%lld\n",sum);
64 }
65 return 0;
66 }
67 LL BIT(int i)
68 {
69 LL s=0;
70 while(i>0)
71 {
72 s=(s+bit[i])%N;
73 i-=(i&(-i));
74 }
75 return s;
76 }
77 void add(int i,int x,int n)
78 {
79 while(i<=n)
80 {
81 bit[i]=(bit[i]+x)%N;
82 i+=(i&(-i));
83 }
84 }

Problem 2236 第十四个目标的更多相关文章

  1. FZu Problem 2236 第十四个目标 (线段树 + dp)

    题目链接: FZu  Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...

  2. 第十四个目标(dp + 树状数组 + 线段树)

    Problem 2236 第十四个目标 Accept: 17    Submit: 35 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  3. hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板

    比赛的时候抄poj2926的模板,但改不来啊orz #include <iostream> #include <cstdio> #include <cstring> ...

  4. 第十四个目标 (fzu)

    http://acm.fzu.edu.cn/contest/problem.php?cid=151&sortid=8 Problem Description 目暮警官.妃英里.阿笠博士等人接连 ...

  5. FZU2236 第十四个目标 dp+树状数组优化

    分析:这种题烂大街,n^2,然后数据结构优化下到nlogn,离散化 #include <cstdio> #include <cstring> #include <queu ...

  6. 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170

    POJ1182 http://poj.org/problem?id=1182 题目 难得的中文题... 食物链 Time Limit: 1000MS Memory Limit: 10000K Tota ...

  7. [LeetCode] The Skyline Problem

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  8. hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)

    这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ...

  9. ACM: A Simple Problem with Integers 解题报告-线段树

    A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...

随机推荐

  1. 01 eclipse搭建maven的web工程(3.1)

    eclipse搭建maven的web工程(3.1) 一.下载并在eclipse安装JDK环境[查看] 二.下载并在eclipse安装maven环境[查看] 三.新建maven-webapp工程: 1. ...

  2. 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明

    1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...

  3. 分布式服务治理框架Dubbo的前世今生及应用实战

    Dubbo的出现背景 Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 ...

  4. 日常Java 2021/10/24

    Java ArrrayList ArrayList类是一个可以动态修改的数组,没有固定大小的限制,可以在任何时候添加或者删除元素 ArrayList类在java.util包中使用之前需要引用 E:泛型 ...

  5. 日常Java 2021/9/29

    StringBuffer方法 public StringBuffer append(String s) 将指定的字符串追加到此字符序列. public StringBuffer reverse() 将 ...

  6. tomcat源码1

    Lifecycle:(接口) LifecycleBase:abstract:添加,删除Listener,各种init,start,stop,destory LifecycleMBeanBase:abs ...

  7. Output of C++ Program | Set 11

    Predict the output of following C++ programs. Question 1 1 #include<iostream> 2 using namespac ...

  8. 【编程思想】【设计模式】【其他模式】blackboard

    Python版 https://github.com/faif/python-patterns/blob/master/other/blackboard.py #!/usr/bin/env pytho ...

  9. Spring(4):Mybatis和Spring整合

    第一步:创建数据库 MySQL代码 1 CREATE DATABASE `mybatis` ; 2 3 USE `mybatis`; 4 5 CREATE TABLE `user` ( 6 `id` ...

  10. Druid数据库连接池工具类

    package cn.itcast.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSo ...