OO’s Sequence

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 42    Accepted Submission(s): 21

Problem Description
OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) , that there's no j(l<=j<=r,j<>i) satisfy ai mod aj=0,now OO want to know

∑i=1n∑j=inf(i,j) mod (109+7).

 
Input
There are multiple test cases. Please process till EOF.

In each test case:

First line: an integer n(n<=10^5) indicating the size of array

Second line:contain n numbers ai(0<ai<=10000)
 
Output
For each tests: ouput a line contain a number ans.
 
Sample Input
5
1 2 3 4 5
 
Sample Output
23

对每一个区间这样的数的个数求和,这样的数满足在这个区间内没有数能被它整除。不包含它本身。

由于a最大10000。我的做法是用vector记录下每一个数出现的位置,再枚举每一个数,看它在多少个区间内满足条件,枚举的过程是求这个数全部的因子,二分这个因子出如今这个数左边最右的位置和这个数右边最左的位置,最后得到这个数能延伸到的最远的左右区间。这个区间内没有数能被这个数整除。假设这个数的位置是i,左区间是l。右区间是r,则对于这个数共同拥有(i-l)*(r-i)种区间满足。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm> using namespace std; typedef long long LL; const LL INF=0x3f3f3f3f;
const LL MAXN=100010;
const LL MOD=1e9+7; LL N;
LL a[MAXN];
vector<LL> V[10010]; int main(){
freopen("in.txt","r",stdin);
while(scanf("%I64d",&N)!=EOF){
for(LL i=0;i<=10000;i++) V[i].clear();
for(LL i=1;i<=N;i++){
scanf("%I64d",&a[i]);
V[a[i]].push_back(i);
}
for(LL i=0;i<=10000;i++) sort(V[i].begin(),V[i].end());
LL ans=0;
for(LL i=1;i<=N;i++){
LL n=a[i];
LL m=sqrt(n)+1;
LL l=0,r=N+1;
for(LL j=1;j<=m;j++){
if(n%j==0){
if(V[j].size()>0){
LL pos=lower_bound(V[j].begin(),V[j].end(),i)-V[j].begin(),pos2=upper_bound(V[j].begin(),V[j].end(),i)-V[j].begin();
if(pos>0) l=max(l,V[j][pos-1]);
if(pos2<V[j].size()) r=min(r,V[j][pos2]);
}
LL t=n/j;
if(V[t].size()>0){
LL t=n/j;
LL pos=lower_bound(V[t].begin(),V[t].end(),i)-V[t].begin(),pos2=upper_bound(V[t].begin(),V[t].end(),i)-V[t].begin();
if(pos>0) l=max(l,V[t][pos-1]);
if(pos2<V[t].size()) r=min(r,V[t][pos2]);
}
}
}
if(l<i&&r>i) ans=(ans+(r-i)*(i-l))%MOD;
}
printf("%I64d\n",ans);
}
return 0;
}

hdu5288 OO’s Sequence 二分 多校联合第一场的更多相关文章

  1. hdu 5288||2015多校联合第一场1001题

    pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...

  2. hdu5294||2015多校联合第一场1007 最短路+最大流

    http://acm.hdu.edu.cn/showproblem.php? pid=5294 Problem Description Innocent Wu follows Dumb Zhang i ...

  3. hdu5289 2015多校联合第一场1002 Assignment

    题意:给出一个数列.问当中存在多少连续子区间,当中子区间的(最大值-最小值)<k 思路:设dp[i]为从区间1到i满足题意条件的解.终于解即为dp[n]. 此外 如果对于arr[i] 往左遍历 ...

  4. HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场

    题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...

  5. hdu 4869 Turn the pokers (2014多校联合第一场 I)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. HDU 4870 Rating (2014 多校联合第一场 J)(概率)

    题意: 一个人有两个TC的账号,一开始两个账号rating都是0,然后每次它会选择里面rating较小的一个账号去打比赛,每次比赛有p的概率+1分,有1-p的概率-2分,当然如果本身是<=2分的 ...

  7. HDU 4869 Turn the pokers (2014 多校联合第一场 I)

    HDOJ--4869--Turn the pokers[组合数学+快速幂] 题意:有m张扑克,开始时全部正面朝下,你可以翻n次牌,每次可以翻xi张,翻拍规则就是正面朝下变背面朝下,反之亦然,问经过n次 ...

  8. HDU 4865 Peter's Hobby(2014 多校联合第一场 E)(概率dp)

    题意:已知昨天天气与今天天气状况的概率关系(wePro),和今天天气状态和叶子湿度的概率关系(lePro)第一天为sunny 概率为 0.63,cloudy 概率 0.17,rainny 概率 0.2 ...

  9. HDU 4868 Information Extraction(2014 多校联合第一场 H)

    看到这道题时我的内心是奔溃的,没有了解过HTML,只能靠窝的渣渣英语一点一点翻译啊TT. Information Extraction 题意:(纯手工翻译,有些用词可能在html中不是一样的,还多包涵 ...

随机推荐

  1. LIMIT语句解析及本章简单回顾(二十九)

    一.LIMIT 限制查询结果返回的数量 [LIMIT {[offset,] row_count | row_count OFFSET offset}] select * from user; 除了可以 ...

  2. 基于python3-sklearn,Flask 的回归预测系统

    看到一副图片挺有意思,放在片头 序 "傍晚小街路面上沁出微雨后的湿润,和煦的西风吹来,抬头看看天边的晚霞,嗯明天又是一个好天气.走到水果摊旁,挑了个根蒂蜷缩.敲起来声音浊响的青绿西瓜,一边满 ...

  3. animation和transition做动画的区别

    animation做动画,是不需要去触发的,可以定义一开始就执行 transition做动画,是需要人为触发,才能执行的

  4. 集合TreeSet的使用

    集合中的TreeSet是集合体系结构中的底层实现,是Collection的孙子,Set的儿子.TreeSet除拥有父接口的特点外,还有其自身的特点.下面就看看TreeSet的排序是怎么实现的.从它的构 ...

  5. 洛谷 P1156 垃圾陷阱 (01背包拓展)(好题!!)

    这真是一道好题目 学到了很多 一开始感觉吃或者不吃会有后效性 然后看到洛谷的题解,直接把这个有后效性的部分当作dp的维度和值 因为这个垃圾可以堆或者不堆,所以这个很像01背包, 但是加了非常多的限制条 ...

  6. [TJOI2017]城市(树的直径)

    [TJOI2017]城市 题目描述 从加里敦大学城市规划专业毕业的小明来到了一个地区城市规划局工作.这个地区一共有ri座城市,<-1条高速公路,保证了任意两运城市之间都可以通过高速公路相互可达, ...

  7. 题解 P2068 【统计和】

    这是一道单点修改,区间查询的线段树. 需要实现的操作有三个:建树,更新与查询. 首先,线段树用结构体维护,如下: struct node { int l, r; int val; } tree[max ...

  8. 【习题 8-16 UVA - 1618】Weak Key

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举N[q]和N[r]的位置 因为N[q]是最大值,且N[r]是最小值. 且它们是中间的两个. 枚举这两个可以做到不重复枚举. 然后 ...

  9. 【Uva 11584】Partitioning by Palindromes

    [Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...

  10. spring AOP的Pointcut注解报错

    error at ::0 can't find referenced pointcut spring使用的是4.1.0,在项目中直接复制旧的aspectjweave.jar报错了 然后换成aspect ...