博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数
阅读量:5337 次
发布时间:2019-06-15

本文共 2087 字,大约阅读时间需要 6 分钟。

思路:参照脑补出的一个\(map\)\(vector\)的写法,写起来比线段树短,运行时间比线段树快。
代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define fi first#define se second#define LL long long#define pb emplace_back#define pii pair
const int N = 1e5 + 5;int T, n, q, a[N], L[N], R[N], d[N], cnt;LL ans[N];vector
vc[N], p[N*20];vector
sum[N*20];map
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
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;}

转载于:https://www.cnblogs.com/widsom/p/11259389.html

你可能感兴趣的文章
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>