2015 Multi-University Training Contest 1 - 1001 OO’s Sequence
OO’s Sequence
Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5288
Mean:
给定一个数列,让你求所有区间上满足Ai%Aj!=0(Ai!=Aj)的Ai的个数之和。
analyse:
对于Ai,如果我们知道最靠近Ai且能够整除Ai的数的下标l和r,那么Ai对答案的贡献就是(r-i)*(i-l)。剩下的就是怎样去求每个Ai的l和r了。
首先我们预处理出:对于每个i,能够被1~i整除的数,用链表存起来。
那么对于输入的数列Ai,我们就可以在O(1)的时间复杂度内知道他能够被哪些数整除,然后去找这些数在pos数组中映射的位置。
从左往右求出每个Ai的l,从右往左求出每个Ai的r,然后O(n)扫一遍统计答案。
Time complexity: O(N*sqrt(A))
Source code:
- /*
- * this code is made by crazyacking
- * Verdict: Accepted
- * Submission Date: 2015-07-22-08.50
- * Time: 0MS
- * Memory: 137KB
- */
- #include <queue>
- #include <cstdio>
- #include <set>
- #include <string>
- #include <stack>
- #include <cmath>
- #include <climits>
- #include <map>
- #include <cstdlib>
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cstring>
- #define LL long long
- #define ULL unsigned long long
- using namespace std;
- const int MAXN = 10005, MAXX = 100005, mod = 1e9 + 7;
- vector<int> divi[MAXN];
- int a[MAXX], l[MAXX], r[MAXX], pos[MAXX], n;
- void init()
- {
- for( int i = 1; i <= 10000; ++i )
- for( int j = 1; j <= i; ++j )
- if( !( i % j ) ) divi[i].push_back( j );
- }
- int main()
- {
- ios_base::sync_with_stdio( false );
- cin.tie( 0 );
- init();
- while( cin >> n )
- {
- for( int i = 0; i < n; ++i ) cin >> a[i];
- memset( l, -1, sizeof l );
- memset( r, 0x3f, sizeof r );
- memset( pos, -1, sizeof pos );
- for( int i = 0; i < n; ++i )
- {
- int lef = -1;
- for( int j = 0; j < divi[a[i]].size(); ++j )
- lef = max( lef, pos[divi[a[i]][j]] );
- pos[a[i]] = i;
- l[i] = lef;
- }
- memset( pos, 0x3f, sizeof pos );
- for( int i = n - 1; i >= 0; --i )
- {
- int rig = 0x3f3f3f3f;
- for( int j = 0; j < divi[a[i]].size(); ++j )
- rig = min( rig, pos[divi[a[i]][j]] );
- pos[a[i]] = i;
- r[i] = rig;
- }
- int ans = 0, L, R;
- for( int i = 0; i < n; ++i )
- {
- if( l[i] == -1 ) L = i + 1;
- else L = i - l[i];
- if( r[i] == 0x3f3f3f3f ) R = n - i;
- else R = r[i] - i;
- ans = ( L * R % mod + ans ) % mod;
- }
- cout << ans << endl;
- }
- return 0;
- }
- /*
- */
2015 Multi-University Training Contest 1 - 1001 OO’s Sequence的更多相关文章
- 2015 Multi-University Training Contest 6 hdu 5357 Easy Sequence
Easy Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2015 Multi-University Training Contest 2 hdu 5306 Gorgeous Sequence
Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU 6362.oval-and-rectangle-数学期望、微积分 (2018 Multi-University Training Contest 6 1001)
2018 Multi-University Training Contest 6 6362.oval-and-rectangle 题意就是椭圆里画内接矩形,问你矩形周长的期望. 比赛的时候推了公式,但 ...
- HDU 6319.Problem A. Ascending Rating-经典滑窗问题求最大值以及COUNT-单调队列 (2018 Multi-University Training Contest 3 1001)
2018 Multi-University Training Contest 3 6319.Problem A. Ascending Rating 题意就是给你长度为k的数列,如果数列长度k<n ...
- HDU 6298.Maximum Multiple-数学思维题(脑子是个好东西,可惜我没有) (2018 Multi-University Training Contest 1 1001)
暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了... 2018 Multi-University Training Contest 1 HDU6298.M ...
- 2015 Multi-University Training Contest 3 1001 Magician
Magician Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5316 Mean: n个数,2种操作,1是单点更新,2是询问区间 ...
- 2015 Multi-University Training Contest 4 1001 Olympiad
代码: #include<cstdio> #include<cstring> #include<set> using namespace std; int vis[ ...
- 2019 Multi-University Training Contest 1 - 1001 - Blank - dp
http://acm.hdu.edu.cn/showproblem.php?pid=6578 不会做,看题解. 设dp[i][j][k][l]表示4种颜色出现的最后的位置分别是i,j,k,l的方法数, ...
- 【思路题】【多校第一场】【1001.OO’s Sequence】
题目大意: 给你一个序列A,f(l,r) 表示 在[l,r]中 的Ai 对于每一个数Aj 都有 Ai%Aj!=0 的数目( i!=j ) 卡了一段时间..... 题解 简单题 定义两个数组L[i ...
随机推荐
- HiveServer2 的jdbc方式创建udf的修改(add jar 最好不要使用),否则会造成异常: java.sql.SQLException: Error while processing statement: null
自从Hive0.13.0开始,使用HiveServer2 的jdbc方式创建udf的临时函数的方法由: ADD JAR ${HiveUDFJarPath} create TEMPORARY funct ...
- Android--Sensor传感器
前言 Android提供了对设备传感器的支持,只要Android设备的硬件提供了这些传感器,Android应用可以通过传感器来获取设备的外界条件,包括手机的运行状态.当前摆放的方向等.Android系 ...
- Metaweblog在Android上使用
同步发表于http://avenwu.net/2015/02/04/metaweblog metaweblog是一个博客接口协议,目前主流的博客平台均支持该协议,比如博客园,CSDN,WordPres ...
- 让MyEclipse2013兼容Retina屏幕
1. 找到文件:/Applications/MyEclipse/MyEclipse Professional.app/Contents/Profile/myeclipse.app/Contents/I ...
- glide 加载圆角图片
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEIAAAD3CAIAAACW6Gb7AAAgAElEQVR4nOy9e1QbZf74//zO4XvOYz
- Java WebService 简单实例[转]
http://www.cnblogs.com/yisheng163/p/4524808.html?utm_source=tuicool 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必 ...
- DVI-A、DVI-D、DVI-I接口定义、DVI接口图和DVI接口标准介绍
http://blog.csdn.net/cd520yy/article/details/16993179
- iOS开发-NSDate使用
时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间的总秒数.它也被称为 Unix 时间戳(Unix Timestamp). 下面是iOS中时间戳 与 时间之间的转换方法: ...
- python 字符串比较
cmp方法比较两个对象,并根据结果返回一个整数.cmp(x,y)如果X< Y,返回值是负数 如果X>Y 返回的值为正数. sStr1 = 'strch'sStr2 = 'strchr'pr ...
- java计算当前周开始日期&结束日期
public static Date getFirstDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDa ...