HDU 5288 OO's sequence (2015多校第一场 二分查找)
OO’s Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory
Limit: 131072/131072 K (Java/Others)
Total Submission(s): 955 Accepted Submission(s): 358

rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">(
rev=2.4-beta-2" alt="" style="">
rev=2.4-beta-2" alt="" style="">)
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)
5
1 2 3 4 5
23
解题思路:
预处理出全部数的因数而且保存每一个数出现的位置,对于每一个A[i], 找最小的区间使得该区间内不包括A[i]的因数,通过向左向右进行两次二分查找来实现。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 100000 + 10;
const int MOD = 1e9 + 7;
vector<int>G[MAXN];
vector<int>p[MAXN];
vector<int>rp[MAXN];
vector<int>M[MAXN];
int N;
int A[MAXN];
int main()
{
for(int i=1; i<=10000; i++)
{
for(int j=i; j<=10000; j+=i)
G[j].push_back(i);
}
while(scanf("%d", &N)!=EOF)
{
for(int i=1;i<=N;i++) p[i].clear();
for(int i=1;i<=N;i++) rp[i].clear();
for(int i=1; i<=N; i++)
scanf("%d", &A[i]);
for(int i=1; i<=N; i++)
{
p[A[i]].push_back(i);
}
for(int i=N;i>=1;i--)
{
rp[A[i]].push_back(-i);
}
long long ans = 0;
for(int i=1; i<=N; i++)
{
int L = -1, R = N + 1;
for(int j=0; j<G[A[i]].size(); j++)
{
int x = G[A[i]][j];
int r = upper_bound(p[x].begin(), p[x].end(), i) - p[x].begin();
int l = upper_bound(rp[x].begin(), rp[x].end(), -i) - rp[x].begin();
if(r >= p[x].size()) r = N + 1;
else r = p[x][r];
//cout << x << ": " << l << ' '<< r << endl;
if(l >= rp[x].size()) l = 0;
else l = -(rp[x][l]);
//cout << x << ": " << l << ' '<< r << endl;
L = max(l, L);
R = min(R, r);
}
if(R == 0) R = N + 1;
if(L < 0) L = 0;
//cout << L << ' ' << R << endl;
ans = (ans + (long long)(i - L) * (long long)(R - i)) % MOD;
}
printf("%I64d\n", ans );
}
return 0;
}
HDU 5288 OO's sequence (2015多校第一场 二分查找)的更多相关文章
- HDU 5289 Assignment(2015 多校第一场二分 + RMQ)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- hdu 5288 OO’s Sequence(2015多校第一场第1题)枚举因子
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288 题意:在闭区间[l,r]内有一个数a[i],a[i]不能整除 除去自身以外的其他的数,f(l,r ...
- HDU 5288 OO’s Sequence
题意: 给你一个序列, 有一个函数 F(L,R) 其中 ai 均不能 被 aL - aR整除的 函数值是这个ai个数 思路 : 反过来求 满足这样的条件的 ai 的区间,然后求和 #include& ...
- hdu 5294 Tricks Device(2015多校第一场第7题)最大流+最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 题意:给你n个墓室,m条路径,一个人在1号墓室(起点),另一个人在n号墓室(终点),起点的那 ...
- hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...
- 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 ...
- hpuoj--校赛--2015年的第一场雪(暴力)
问题 D: 感恩节KK专场--2015年的第一场雪 时间限制: 1 Sec 内存限制: 128 MB 提交: 865 解决: 76 [提交][状态][讨论版] 题目描述 下雪了,KK学长站在三教门 ...
- 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 ...
随机推荐
- 简单优化:Zipalign
Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化.在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率.因此,这种方式 ...
- go当中寄生于变量的方法
这个东东,好像其它语言很少见呢. 印象中,ruby是可以这样的. package main import ( "fmt" ) type user struct { name str ...
- Android Webview中解决H5的音视频不能自动播放的问题
在开发webview的时候,当加载有声音的网页的时候,声音不会自动播放, 解决方法:在webview中调用js方法.这个方法需要在webview的setWebViewClient方法之后在onPage ...
- http学习笔记1
通讯的条件 学前小故事 通过这个故事,我们来理解两台电脑之间的通信,必须具备什么样的条件? 有一天啊,这个小明和小强,一个在山的这头放牛,一个在山的那头割草.但是,由于无聊,这个小明就像找对面的小强聊 ...
- 解析kubernetes架构
一. 简介: kubernetes是一个开源的容器管理工具,是基于GO语言开实现的,轻量级和便携式的应用,可以把kubernetes cluster在linux主机上部署.管理和扩容docker容器的 ...
- Django Suit v2-dev 使用
转:链接:https://www.jianshu.com/p/84fa8219fb48 官方文档: 链接 Git: 链接 install Django Suit 为了适配 Django 有许多不同的版 ...
- Ubuntu 如何更换阿里源
#进入源地址 cd /etc/apt #备份源文件 sudo cp sources.list sources.list.bak #编辑 sudo vim /etc/apt/sources.list d ...
- mongoDB学习第二天之常用方法
mongoDB LIMIT 和 SKIP 方法 db.colName.find().limit(num) # limit 方法接收一个数字参数,该参数指定读取的记录条数 (db.colName.fi ...
- python 2 如何安装 MySQL 数据库操作库
我试了好几种网上的办法,在 windows 10 VS2017 环境下不是缺了头文件,就是缺 .lib,反正十分繁琐,以后我也懒得搞了,都用 annaconda 来搞定就好了,时间宝贵. 在 控制台中 ...
- HDU 6052 To my boyfriend(概率 贡献)
To my boyfriend Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...