这道题主要就是问你,长度为n的序列,有多少种上升的子序列

当前点的情况种数等于前面所有小于它的点的种数相加 + 1

1就是只有这一个点的时候的序列

那就是要多次查询前面比它小的点的种数的和

那么就是区间求和

用到树状数组就过了

一开始我用的a[k]表示这个点的值等于k时有多少种情况,但是后来考虑到对

输入的值没有限制

有可能这个点的值等于 100000000

那我就要建这么大的数组 明显过不去

并且我们只要直到这个点前面的种数和就行

排序后查找就行了

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 5e5+;
long long b[maxn];
long long a[maxn];
long long val[maxn];
long long n;
long long mod = 1e9+;
long long getsum(long long c[],long long i);
long long lowbit(long long k);
void add(long long c[],long long i,long long j);
int main()
{
int t;
scanf("%d",&t);
for(int ll = ; ll <= t; ++ll)
{
long long m,x,y,z;
scanf("%lld%lld%lld%lld%lld",&n,&m,&x,&y,&z);
for (long long i = ; i < m; i++)
scanf("%lld",&a[i]);
for (int i = ; i < n; i++){
b[i+] = val[i+] = a[i%m];
a[i%m] = (x*a[i%m]+y*(i+))%z;
}
memset(a, ,sizeof(a));
sort(b+,b+n+);
long long sum = ;
for(long long i=;i<=n;++i)
{
long long pos = lower_bound(b+,b+n+,val[i]) - b;
long long ans = getsum(a, pos-) + ;
sum += ans;
sum %= mod;
add(a,pos,ans);
}
printf("Case #%d: %lld\n",ll,sum);
}
}
long long lowbit(long long k)
{
return k&(-k);
}
void add(long long c[],long long i,long long j)
{
while(i<=n)
{
c[i] += j;
c[i] %= mod;
i += lowbit(i);
}
}
long long getsum(long long c[],long long i)
{
long long sum = ;
while(i > )
{
sum += c[i];
sum %= mod;
i -= lowbit(i);
}
return sum;
}

hdu 3030的更多相关文章

  1. HDU 3030 - Increasing Speed Limits

    Problem Description You were driving along a highway when you got caught by the road police for spee ...

  2. hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)

    Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  3. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

  4. HDU 4126 Genghis Khan the Conqueror 最小生成树+树形dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4126 Genghis Khan the Conqueror Time Limit: 10000/50 ...

  5. 【hdu 2176】取(m堆)石子游戏

    Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  6. 【hdu 3389】Game

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. ES6 Reflect的认识

    首先我们要了解一下,为什么会新添加这么一个全局对象?如果你看过Reflect的一些函数,你就会发现,这个对象上的方法基本上都可以从Object上面找到,找不到的那些,也是可以通过对对象命令式的操作去实 ...

  2. Gulp应用场景

    转自:Gulp教程之:Gulp能做什么,前端装逼为何要用它 我们先说说 平时web开发遇到的一些场景 和 苦恼无奈的情况:   JavaScript和CSS的版本问题 我们都知道 JavaScript ...

  3. 未能找到 CodeDom 提供程序类型“Microsoft.VJSharp.VJSharpCodeProvider,

    错误 1 未能找到 CodeDom 提供程序类型“Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=2.0.0.0 ...

  4. PHP 语句和时间函数

    语句 1.分支语句 (1)if例子:$a=9;$b=5;if($a>$b){echo $a."比".$b."大";}else{echo $a." ...

  5. 十年百度工作心得(月薪75k)

    百度,是多少从事IT事业的程序员梦寐以求的地方,能进入这样大厂的程序员可以说都是数一数二的人才. 最近有不少朋友问,成为百度,腾讯,阿里Java架构师需要系统学习哪些Java技术. 下面分享互联网Ja ...

  6. spring+mybatis+mina+logback框架搭建

    第一次接触spring,之前从来没有学过spring,所以算是赶鸭子上架,花了差不多一个星期来搭建,中间遇到各种各样的问题,一度觉得这个框架搭建非常麻烦,没有一点技术含量,纯粹就是配置,很低级!但随着 ...

  7. NC 5的开发环境起不了客户端

    5的开发环境,中间件启动无异常,但是在起客户端时报错,连中间件也关闭了. 添加图中两个jdk下的包

  8. Python实现的复杂的计算器的代码

    用Python实现复杂的计算器,可以按照“()”.乘除.加减的优先级进行混合运算.主旨是对正则表达式进行学习. 设计思路: 1.在计算式中搜索最后一个“(”,再搜索和它匹配的“)”,截取两个括号间的表 ...

  9. [ES]elasticsearch章3 ES写入过程解析

    Elasticsearch的写 Elasticsearch采用多Shard方式,通过配置routing规则将数据分成多个数据子集,每个数据子集提供独立的索引和搜索功能.当写入文档的时候,根据routi ...

  10. oralce的lag和lead函数

    https://www.cnblogs.com/always-online/p/5010185.html