#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 500000
#define mod 1000000007 __int64 a[N], b[N], ans[N]; void Init()
{
int i;
a[] = b[] = ;
a[] = ;
b[] = ;
for(i=; i<N; i++)
{
a[i] = lower_bound(b+, b+i, i) - b;
b[i] = b[i-] + a[i];
}
ans[] = ;
for(i=; i<N; i++)
{
ans[i] = ans[i-] + (b[i]-b[i-])*(b[i-]+ + b[i]) / % mod * i % mod;
}
} int main()
{
int T, n, i;
Init();
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
int pos = lower_bound(b+, b+N+, n) - b;
__int64 Ans = ans[pos-];
for(i=b[pos-]+; i<=n; i++)
Ans = (Ans + (__int64)i*pos) % mod;
printf("%I64d\n", Ans);
}
return ;
}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5439

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置

pos = lower_bound(a, a+n, k) - a;  是在a中>=k的第一个数的位置;

题意:刚开始给一个1,序列a是由a[i]个i组成,最后就变成了1,2,2,3,3,4,4,4,5,5,5.......

就是求Ans: 即n在a中最后出现的位置m,m在a中的最后出现的位置Ans;

我们用b【i】表示i在a中出现的最后位置;

用ans【i】表示b【i】在a中出现的最后位置;

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 500000
#define mod 1000000007 __int64 a[N], b[N], ans[N]; void Init()
{
int i;
a[1] = b[1] = 1;
a[2] = 2;
b[2] = 3;
for(i=1; i<N; i++)
{
a[i] = lower_bound(b+1, b+i, i) - b;
b[i] = b[i-1] + a[i];
}
ans[1] = 1;
for(i=2; i<N; i++)
{
ans[i] = ans[i-1] + (b[i]-b[i-1])*(b[i-1]+1 + b[i]) / 2 % mod * i % mod;
}
} int main()
{
int T, n, i;
Init();
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
int pos = lower_bound(b+1, b+N+1, n) - b;
__int64 Ans = ans[pos-1];
for(i=b[pos-1]+1; i<=n; i++)
Ans = (Ans + (__int64)i*pos) % mod;
printf("%I64d\n", Ans);
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 500000
#define mod 1000000007 __int64 a[N], b[N], ans[N]; void Init()
{
int i;
a[1] = b[1] = 1;
a[2] = 2;
b[2] = 3;
for(i=1; i<N; i++)
{
a[i] = lower_bound(b+1, b+i, i) - b;
b[i] = b[i-1] + a[i];
}
ans[1] = 1;
for(i=2; i<N; i++)
{
ans[i] = ans[i-1] + (b[i]-b[i-1])*(b[i-1]+1 + b[i]) / 2 % mod * i % mod;
}
} int main()
{
int T, n;
Init();
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
int pos = upper_bound(b+1, b+N+1, n) - b - 1;
__int64 Ans = (ans[pos] + (b[pos] + 1 + n)*(n - b[pos])/2 % mod * (pos+1)) % mod;
printf("%I64d\n", Ans);
}
return 0;
}

  

  

Aggregated Counting-----hdu5439(2015 长春网络赛 找规律)的更多相关文章

  1. Hdu 5439 Aggregated Counting (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online 找规律)

    题目链接: Hdu 5439 Aggregated Counting 题目描述: 刚开始给一个1,序列a是由a[i]个i组成,最后1就变成了1,2,2,3,3,4,4,4,5,5,5.......,最 ...

  2. hdu 4731 2013成都赛区网络赛 找规律

    题意:找字串中最长回文串的最小值的串 m=2的时候暴力打表找规律,打表可以用二进制枚举

  3. 2015长春网络赛1001 求连通快数量的问题dfs

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  4. hdu 5441 (2015长春网络赛E题 带权并查集 )

    n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排 ...

  5. hdu 5446(2015长春网络赛J题 Lucas定理+中国剩余定理)

    题意:M=p1*p2*...pk:求C(n,m)%M,pi小于10^5,n,m,M都是小于10^18. pi为质数 M不一定是质数 所以只能用Lucas定理求k次 C(n,m)%Pi最后会得到一个同余 ...

  6. Hdu 5445 Food Problem (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online)

    题目链接: Hdu  5445 Food Problem 题目描述: 有n种甜点,每种都有三个属性(能量,空间,数目),有m辆卡车,每种都有是三个属性(空间,花费,数目).问至少运输p能量的甜点,花费 ...

  7. Supreme Number 2018沈阳icpc网络赛 找规律

    A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...

  8. HDU 4763 Theme Section (2013长春网络赛1005,KMP)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. HDU 4764 Stone (2013长春网络赛,水博弈)

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

随机推荐

  1. STM32 中断应用概览

    本章参考资料< STM32F4xx 中文参考手册>第十章-中断和事件.<ARM Cortex™-M4F 技术参考手册> -4.3 章节: NVIC 和 4.4 章节: SCB— ...

  2. Roslyn介绍

    介绍 一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集.编译器施展它们的魔法,它们必须对所处理的代码进行深入的理解,不过相关知识不是每个人都 ...

  3. jquery清空textarea等输入框

    转载自:http://blog.csdn.net/dyllove98/article/details/8870307 完整示例:http://www.keleyi.com/keleyi/phtml/c ...

  4. cocos2dx迷你地图

    用CCRenderTexture就可以了,不知是否有更好的方法. if (!miniMap) { miniMap=CCSprite::create(); miniMap->setZOrder() ...

  5. PHP——0128练习相关3——设置文本域的默认值

    都知道文本框的的默认值只要设置value属性即可但是文本域是没有value属性的要设置文本域的默认值只要<textarea>默认值</textarea>即可简单吧,呵呵..

  6. 关于报错“syntax error near unexpected token `”和回车换行

    本来是很简单一个事情,转过来是因为打字机这事比较有趣…… http://blog.csdn.net/xyp84/archive/2009/08/11/4435899.aspx 摘要一下: 回车 换行 ...

  7. HBase和ZooKeeper

    HBase和ZooKeeper HBase内置有ZooKeeper,也可以使用外部ZooKeeper. 让HBase使用一个已有的不被HBase托管的Zookeep集群,需要设置 conf/hbase ...

  8. Sencha Touch快速入门(译)

    翻译自:http://www.sencha.com/learn/sencha-touch-quick-start/ 1.下载Sencha Touch SDK——下载链接 2.安装Safari或Chro ...

  9. jquery ajax 的用法

    jquery的ajax请求的主要参数 beforeSend:发送ajax请求之前 success:发送ajax请求成功 error:发送ajax请求错误,通常是网络失去连接.服务器出错.后台方法错误等 ...

  10. layDate/DatePicker日期时间空间

    真心不错,果断收藏了. 1.示例与效果 2.更多示例与皮肤 补充说明:My97DatePicker日期时间插件 的使用 1.示例与效果 2. 更多 常用的实例:WdatePicker下载 http:/ ...