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

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

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="">

 
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
 
Author
FZUACM
 
Source

解题思路:

预处理出全部数的因数而且保存每一个数出现的位置,对于每一个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&#39;s sequence (2015多校第一场 二分查找)的更多相关文章

  1. HDU 5289 Assignment(2015 多校第一场二分 + RMQ)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  2. 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 ...

  3. HDU 5288 OO&rsquo;s Sequence

    题意: 给你一个序列, 有一个函数 F(L,R) 其中 ai 均不能 被 aL - aR整除的  函数值是这个ai个数 思路 : 反过来求 满足这样的条件的 ai 的区间,然后求和 #include& ...

  4. hdu 5294 Tricks Device(2015多校第一场第7题)最大流+最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294   题意:给你n个墓室,m条路径,一个人在1号墓室(起点),另一个人在n号墓室(终点),起点的那 ...

  5. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...

  6. 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 ...

  7. hpuoj--校赛--2015年的第一场雪(暴力)

    问题 D: 感恩节KK专场--2015年的第一场雪 时间限制: 1 Sec  内存限制: 128 MB 提交: 865  解决: 76 [提交][状态][讨论版] 题目描述 下雪了,KK学长站在三教门 ...

  8. Hdu 5288 OO’s Sequence 2015多小联赛A题

    OO's Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  9. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)

    OO's Sequence                                                          Time Limit: 4000/2000 MS (Jav ...

随机推荐

  1. VuGen录制选项Recording Options

  2. Windows 命令行切换目录

    Windows 命令行切换目录 特别注意:切换到其它盘符不需要 cd 命令 1. 切换到 C 盘根目录 打开终端 cmd 后,输入cd C:\(一定要加上后面的反斜扛) 2.切换到 C 盘子目录 打开 ...

  3. 转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)

    LNMP虚拟主机PHP沙盒绕过/命令执行 lnmp更新1.2版本,很多东西都升级了,很棒.不过还是发现一个BUG. LNMP是一款linux下nginx.php.mysql一键安装包. 下载:http ...

  4. 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]

    洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 299  Solved: 207 Description 加里敦星球的人 ...

  5. 更改paramiko 源码 记录命令实现堡垒机功能

    利用paramiko 下的demo可以很容易的实现记录客户在操作客户机时的命令,修改\demos\interactive.py def posix_shell(chan): import select ...

  6. 【BZOJ 2916】 2916: [Poi1997]Monochromatic Triangles (容斥)

    2916: [Poi1997]Monochromatic Triangles Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 310  Solved: 1 ...

  7. [BZOJ4887][TJOI2017]可乐(DP+矩阵快速幂)

    题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...

  8. 【20181027T2】易水决【贪心+堆】

    原题:loj6035 [错解] 全肝T1了没怎么想 [正解] 一眼贪心 先考虑\(b_i=0\)怎么做 可以模拟一个正常人的思维 开一个堆,记录每个任务需要的时间(包括等待),每次从中取出一个任务,表 ...

  9. BZOJ 2938 [Poi2000]病毒(AC自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2938 [题目大意] 给出一些病毒串,问是否存在不包含任何病毒串的无限长的字符串 [题解 ...

  10. Redis 锁的实现方案

    开发中不可避免的是碰到并发请求,在数据严谨性的要求不高时,我们也不需要做什么处理,但如果碰到数据严谨性非常高的时候(例如:用户金额,秒杀产品的库存...),我们就需要慎重处理了. 解决方案多种多样,下 ...