zoukankan      html  css  js  c++  java
  • Light oj 1085

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1085

    题意:

            问你有多少个上升子序列。

    思路:

            dp[i]表示以第i个数结尾的上升序列数量。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <map>
     6 using namespace std;
     7 typedef long long LL;
     8 const int N = 1e5 + 5;
     9 int a[N];
    10 int b[N], n;
    11 LL bit[N], mod = 1e9 + 7;
    12 LL dp[N];
    13 
    14 void add(int i, LL val) {
    15     for( ; i <= n; i += (i&-i))
    16         bit[i] += val;
    17 }
    18 
    19 LL sum(int i) {
    20     LL s = 0;
    21     for( ; i >= 1; i -= (i&-i))
    22         s += bit[i];
    23     return s;
    24 }
    25 
    26 int main()
    27 {
    28     int t;
    29     scanf("%d", &t);
    30     for(int ca = 1; ca <= t; ++ca) {
    31         scanf("%d", &n);
    32         for(int i = 1; i <= n; ++i) {
    33             scanf("%d", a + i);
    34             b[i] = a[i];
    35         }
    36         sort(b + 1, b + n + 1);
    37         memset(bit, 0, sizeof(bit));
    38         memset(dp, 0, sizeof(dp));
    39         for(int i = 1; i <= n; ++i) {
    40             a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
    41             dp[i]++;
    42         }
    43         for(int i = 1; i <= n; ++i) {
    44             dp[i] += sum(a[i] - 1);
    45             dp[i] %= mod;
    46             add(a[i], dp[i]);
    47         }
    48         LL ans = 0;
    49         for(int i = 1; i <= n; ++i) {
    50             ans += dp[i];
    51             ans %= mod;
    52         }
    53         printf("Case %d: %lld
    ", ca, ans);
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    CSS
    人物
    CSS
    CSS
    概念- 工业4.0
    C#正则表达式
    六月定律
    c#中实现登陆窗口(无需隐藏)
    c#中关于String、string,Object、object,Int32、int
    一个快速找第k+1小的算法
  • 原文地址:https://www.cnblogs.com/Recoder/p/5943060.html
Copyright © 2011-2022 走看看