hdoj 5288 OO’s Sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288
//*************头文件区*************
#include<iostream>
#include<cstdio>
#include<vector>
#define N 100010
#define P 1000000007
using namespace std;
int n,tmp,i,j;
int r[N], l[N], q[N], a[N];
long long a1,a2,sum;
vector<int> vec[10010];
int main()
{
freopen("1001.in","r",stdin);
freopen("m1001.out","w",stdout);
while(~scanf("%d",&n)){
for( i = 101; i <= 10000; ++i)
vec[i].clear();
// 清空容器
for( i = 1; i <= n; ++i){
scanf("%d",&a[i]);
l[i] = 0;
r[i] = n+1;
if( a[i] > 100)
vec[a[i]].push_back(i);
// 数据初始化,超过100的数据将下标保存到vec[a[i]]内
}
for( j = 1; j <= 100; ++j){
tmp = 0;
// 暂时保存下标
for( i = 1;i <= n; ++i){
if( a[i] % j ==0 )
l[i] = max(tmp,l[i]);
if( a[i] == j)
tmp = i;
}
tmp = n+1;
for( i = n;i >= 1; --i){
if( a[i] % j ==0)
r[i] = min(tmp,r[i]);
if( a[i] == j)
tmp = i;
}
// 更新以100以内的数为约数的数的左右限制
}
for( i = 101; i <= 10000; ++i)
q[i] = vec[i].size() - 1;
for( i = n; i >= 1; --i){
if(a[i] > 100){
for( j = a[i]; j <= 10000; j = j+a[i]){
while((q[j] >= 0)&&(vec[j][q[j]]>i)){
l[vec[j][q[j]]] = max(l[vec[j][q[j]]],i);
if((q[j] > 0)&&(vec[j][q[j]-1]>i))
q[j]--;
else
break;
}
}
}
}
for( i = 101; i <= 10000; ++i)
q[i] = 0;
// vec下标从0开始?
for( i = 1; i <= n; ++i)
if(a[i] > 100){
for( j = a[i]; j <= 10000; j = j+a[i]){
while((q[j]<vec[j].size())&&(vec[j][q[j]]<i)){
r[vec[j][q[j]]] = min(r[vec[j][q[j]]],i);
if((q[j]<vec[j].size()-1)&&(vec[j][q[j]+1]<i))
q[j]++;
else
break;
}
}
}
sum=0;
for (i=1;i<=n;i++)
{
a1=r[i]-i;
a2=i-l[i];
sum=(sum+a1*a2)%P;
// printf("%lld\n",a1);
}
printf("%I64d\n",sum);
}
}
hdoj 5288 OO’s Sequence的更多相关文章
- 思维题 HDOJ 5288 OO’s Sequence
题目传送门 /* 定义两个数组,l[i]和r[i]表示第i个数左侧右侧接近它且值是a[i]因子的位置, 第i个数被选择后贡献的值是(r[i]-i)*(i-l[i]),每个数都枚举它的因子,更新l[i] ...
- HDOJ 5288 OO’s Sequence 水
预处理出每一个数字的左右两边能够整除它的近期的数的位置 OO's Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
- HDU 5288 OO’s Sequence [数学]
HDU 5288 OO’s Sequence http://acm.hdu.edu.cn/showproblem.php?pid=5288 OO has got a array A of size ...
- HDU 5288 OO‘s sequence (技巧)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5288 题面: OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- HDU 5288 OO’s Sequence 水题
OO's Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5288 Description OO has got a array A ...
- HDU 5288——OO’s Sequence——————【技巧题】
OO’s Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- Hdu 5288 OO’s Sequence 2015多小联赛A题
OO's Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- 【HDOJ】5288 OO’s Sequence
二分寻找对于指定pos的最左因数点和最右因数点. /* 5288 */ #include <iostream> #include <string> #include <m ...
随机推荐
- id to load is required for loading----id被要求加载exception
表示id主键 没有找到,可能是数据库中的主键设置了not null 而你没有给予主键 还有就是没有传递主键到 数据库中
- 用于分类的决策树(Decision Tree)-ID3 C4.5
决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...
- 【解题报告】PKU 2318 TOYS AND PKU 2398 Toy Storage
题目连接: http://poj.org/problem?id=2318 http://poj.org/problem?id=2398 两题类似的题目,2398是2318的升级版. 题目大概是 ...
- 【转】session setup failed: NT_STATUS_LOGON_FAILURE -- 不错
原文网址:http://blog.sina.com.cn/s/blog_5cdb72780100l26f.html samba服务器出现“session setup failed: NT_STATUS ...
- Hadoop学习总结之五:Hadoop的运行痕迹
Hadoop学习总结之五:Hadoop的运行痕迹 Hadoop 学习总结之一:HDFS简介 Hadoop学习总结之二:HDFS读写过程解析 Hadoop学习总结之三:Map-Reduce入门 Ha ...
- gcc/交叉编译
一.gcc编译的情况: 1.linux gcc包含的c/c++编译器,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译. 2.linux gcc的应用: ...
- 表单Ext.form.FormPanel(转)
1.表单 对于传统的b/s应用来说,数据录入元素是放在表单<form>标签里面的.而对于ExtJS应用来说,则可以直接使用FormPanel控件来存放表单中的元素.FormPanel继承自 ...
- suse下设置IP的两种方法
/Files/yzhxhwt/DB_51aspx.rar 第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up ...
- android操作SQLite
一.SQLite SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 ...
- [转]LoadRunner参数化详解
http://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html 距离上次使用loadrunner 已经有一年多的时间了.初做测试时在项目中用过, ...