2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数
连续区间的最大公约数
思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快。
代码:
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define LL long long
#define pb emplace_back
#define pii pair<int, int>
const int N = 1e5 + 5;
int T, n, q, a[N], L[N], R[N], d[N], cnt;
LL ans[N];
vector<int> vc[N], p[N*20];
vector<LL> sum[N*20];
map<int, int> mp, _p, mmp;
int main() {
scanf("%d", &T);
for(int cs = 1; cs <= T; ++cs) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
scanf("%d", &q);
for (int i = 1; i <= q; ++i) {
scanf("%d %d", &L[i], &R[i]);
vc[R[i]].pb(i);
}
cnt = 0;
for (int i = 1; i <= n; ++i) {
for (auto it : mp) {
int g = __gcd(it.fi, a[i]);
if(_p.find(g) == _p.end()) _p[g] = it.se;
}
if(_p.find(a[i]) == _p.end()) _p[a[i]] = i;
mp = _p;
_p.clear();
vector<pii> tmp;
for (auto it : mp) tmp.pb(it.se, it.fi);
for (int j = 0; j < tmp.size(); ++j) {
if(j+1 == tmp.size()) tmp[j].fi = i;
else tmp[j].fi = tmp[j+1].fi-1;
int now;
if(mmp.find(tmp[j].se) == mmp.end()) {
mmp[tmp[j].se] = ++cnt;
now = cnt;
}
else now = mmp[tmp[j].se];
p[now].pb(tmp[j].fi);
sum[now].pb(sum[now].size()==0?tmp[j].fi:sum[now].back()+tmp[j].fi);
}
for (int x : vc[i]) {
int l = L[x];
int t = lower_bound(tmp.begin(), tmp.end(), pii{l, 0})-tmp.begin();
d[x] = tmp[t].se;
int pp = mmp[d[x]];
t = lower_bound(p[pp].begin(), p[pp].end(), l)-p[pp].begin();
if(t-1>=0) ans[x] = sum[pp].back()-sum[pp][t-1]-(sum[pp].size()-t)*1LL*(l-1);
else ans[x] = sum[pp].back()-sum[pp].size()*1LL*(l-1);
}
}
printf("Case #%d:\n", cs);
for (int i = 1; i <= q; ++i) printf("%d %lld\n", d[i], ans[i]);
for (auto it : mmp) p[it.se].clear(), sum[it.se].clear();
mmp.clear();
mp.clear();
for (int i = 1; i <= n; ++i) vc[i].clear();
}
return 0;
}
2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数的更多相关文章
- H-数学考试 想法题+最新头文件 2018年长沙理工大学第十三届程序设计竞赛
https://www.nowcoder.com/acm/contest/96/H 坑点:INF开太小了... #define _CRT_SECURE_NO_WARNINGS #include< ...
- 2018年长沙理工大学第十三届程序设计竞赛 E小木乃伊到我家(spfa模版)
链接:https://www.nowcoder.com/acm/contest/96/E来源:牛客网 小木乃伊到我家 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 2018年长沙理工大学第十三届程序设计竞赛 J杯子
链接:https://www.nowcoder.com/acm/contest/96/J来源:牛客网 杯子 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...
- 2018年长沙理工大学第十三届程序设计竞赛 H数学考试
链接:https://www.nowcoder.com/acm/contest/96/H来源:牛客网 数学考试 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1
Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间限 ...
- 2018年长沙理工大学第十三届程序设计竞赛 G 逃离迷宫 【BFS】
链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018年长沙理工大学第十三届程序设计竞赛 C 取手机 【概率】
链接:https://www.nowcoder.com/acm/contest/96/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家 【最短路】
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 AA的欧尼酱qwb是个考古学家,有一天qwb发 ...
- 哈尔滨理工大学第七届程序设计竞赛初赛(BFS多队列顺序)
哈尔滨理工大学第七届程序设计竞赛初赛https://www.nowcoder.com/acm/contest/28#question D题wa了半天....(真真正正的半天) 其实D题本来就是一个简单 ...
随机推荐
- 最新 边锋网络java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.边锋网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了边锋网络.6.7月主要是做系统复习.项目复盘.Leet ...
- easyui中combobox下拉内容进行分组
需求:对combobox下拉内容进行分组. 效果样式: 代码: valueField:'paymethod_name', textField:'paymethod_name', data:[{ &qu ...
- C#基础知识学习 linq 和拉姆表达式一
两个方法对比 第二种方法 对比学习 拉姆表达 linq 用法
- Nachos java版学习(一)
最近,操作系统课程设计使用伯克利大学的Nachos做为实验平台,老师也照搬伯克利的Project要求,开始我们的操作系统课程设计. 结合自己的学习过程和课设要求,我觉得对Nachos的学习首先应该从K ...
- Java Socket 的工作机制
转载,请加上原文链接: 目录 socket 对象的创建时间 socket 通信可能会造成死锁 socket 对象的创建时间 这里需要一点TCP的知识, TCP状态分析请看 --> TCP转态转换 ...
- logstash grok nginx log
#cat logstash.conf input { file { path => "/alidata/logs/nginx/appapi.dayutang.cn.access*.lo ...
- HTML 前端
昨日内容回顾 HTML文档结构 标签要封闭,全封闭,自封闭 html文件不识别多个空格或者换行,都识别成一个空格 注释: <!-- 注释 --> head标签 网页源信息,配置信息 tit ...
- python2.7 编码问题
python 2.7编码问题,着实令人头疼不已,这两天抽闲想真正弄明白.需要弄清楚这个问题,首先需要明白ASCII,Unicode 和 UTF-8之间的关系. 进行对上述几种概念进行描述之前,先进行简 ...
- scratch少儿编程第一季——05、移动还可以这样动
各位小伙伴大家好: 上期我们学习了怎么控制方向和移动的程序块. 今天我们继续学习运动模块下的其他9个指令(程序块). 首先来看前面两个关于x坐标的程序块. 分别是将x坐标增加()单位,和将x坐标设定为 ...
- Message高级特性
一.延迟和定时消息投递 1 xml中配置schedulerSupport属性为true 2 每小时都会发生消息被投递10次,延迟1秒开始,每次间隔1秒: TextMessage message = s ...