题目链接:http://codeforces.com/problemset/problem/314/C

题意:给定一个数列a。(1)写出a的不同的所有非下降子列;(2)定义某个子列的f值为数列中各个数的乘积。(3)求所有非下降子列的f值之和。

思路:我们用s[i]表示以数字a[i]结尾的所有非下降子列的f之和。那么a必然是接在之前小于等于a的某个数之后,设这个位置为j,那么s[i]=(s[j]+1)*a[i]。也就是,a[i]可以接在其后或者自成一个子列。那么最后的答案就是所有的s值之和。这里有一个问题,就是可能有a[i]相同的,那么这样显然就重复计算。那么我们记录某个值x前一次出现的位置j,将s[j]减去即可。至于维护这个 前i项的s用树状数组。

int n,s[N];

void add(int pos,int x)
{
    while(pos<N)
    {
        s[pos]=(s[pos]+x)%mod;
        pos+=pos&-pos;
    }
}

int get(int pos)
{
    int ans=0;
    while(pos)
    {
        ans=(ans+s[pos])%mod;
        pos-=pos&-pos;
    }
    return ans;
}

int pre[N],a[N];

int main()
{
    RD(n); clr(pre,-1);
    int i,x;
    FOR1(i,n)
    {
        RD(x);
        a[i]=(i64)(get(x)+1)*x%mod;
        if(pre[x]!=-1) add(x,-a[pre[x]]),a[pre[x]]=0;
        pre[x]=i;
        add(x,a[i]);
    }
    int ans=0;
    FOR1(i,n) ans=(ans+a[i])%mod;
    if(ans<0) ans+=mod;
    PR(ans);
    return 0;
}

CF 314C Sereja and Subsequences(树状数组)的更多相关文章

  1. Codeforces 597C. Subsequences (树状数组+dp)

    题目链接:http://codeforces.com/contest/597/problem/C 给你n和数(1~n各不同),问你长为k+1的上升自序列有多少. dp[i][j] 表示末尾数字为i 长 ...

  2. CF 121E Lucky Array 【树状数组】

    这个题目的数据感觉不能更水了.从复杂度上计算,肯定有极限数据可以卡掉暴力方法的么. 总之,暴力的做法就是树状数组了,对于区间更新,就挨个更新就是了.当然,判断是否是Lucky Number的话,可以用 ...

  3. CF597C Subsequences 树状数组 + 动态规划

    设$f(i, j)$表示以$i$结尾的,长为$j$的上升子序列的数量 转移时用树状数组维护即可 复杂度为$O(kn \log n)$ 注:特判0 #include <cstdio> #in ...

  4. LightOJ 1085 - All Possible Increasing Subsequences 树状数组+离散

    http://www.lightoj.com/volume_showproblem.php?problem=1085 题意:求一个序列的递增子序列个数. 思路:找规律可以发现,某个数作为末尾数的种类数 ...

  5. Codeforces Testing Round #12 C. Subsequences 树状数组

    C. Subsequences     For the given sequence with n different elements find the number of increasing s ...

  6. Codeforces Testing Round #12 C. Subsequences 树状数组维护DP

    C. Subsequences Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...

  7. cf 61E. Enemy is weak 树状数组求逆序数(WA) 分类: Brush Mode 2014-10-19 15:16 104人阅读 评论(0) 收藏

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...

  8. CodeForces - 314C Sereja and Subsequences (树状数组+dp)

    Sereja has a sequence that consists of n positive integers, a1, a2, ..., an. First Sereja took a pie ...

  9. 【CF314C】Sereja and Subsequences(DP,树状数组)

    题意:给定一个N个数的数列,求所有不同不下降子序列的乘积之和,其中不同指的是组成它的数字和长度不完全相同 n (1 ≤ n ≤ 10^5) a[i]<=10^6 思路:考虑DP.设DP[a[i] ...

随机推荐

  1. 【Ural】【1519】Formula 1

    插头DP 本题为CDQ<基于连通性状态压缩的动态规划的……(我忘了)>里的例题!(嗯就是这样……) 先膜拜一下ccy大神……http://blog.sina.com.cn/s/blog_5 ...

  2. fiddler 新发现

    就一句话,记录一下 urlreplace baidu.com taobao.com //Fiddler2\Scripts\SampleRules.js 这里发现的 case "urlrepl ...

  3. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  4. rdtsc获取时间统计程序的运行效率

    __u64 rdtsc() {         __u32 lo,hi;           __asm__ __volatile__         (          "rdtsc&q ...

  5. UITextField中文搜索

    导入头文件 #import "ChineseInclude.h"#import "PinYinForObjc.h" NSMutableArray *search ...

  6. kafka配置

    官网:http://kafka.apache.org/ 主要有3种安装方式: 1. 单机单broker 2. 单机多broker 3. 多机多broker 1. wget http://mirror. ...

  7. VS2003 下GridControl的列显示成图片+文字的形式实现

    public RC_CustomerSolicitListUC() { // 该调用是 Windows.Forms 窗体设计器所必需的. InitializeComponent(); // TODO: ...

  8. Linux目录结构【转】

    使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...

  9. 几个经常用到的字符串的截取(java)

    几个经常用到的字符串的截取 string str="123abc456";int i=3;1 取字符串的前i个字符   str=str.Substring(0,i); // or  ...

  10. 【uva753/poj1087/hdu1526-A Plug for UNIX】最大流

    题意:给定n个插座,m个插头,k个转换器(x,y),转换器可以让插头x转成插头y.问最少有多少个插头被剩下. 题解: 最大流或者二分图匹配.然而我不知道怎么打二分图匹配..打了最大流.这题字符串比较坑 ...