清橙A1339. JZPLCM(顾昱洲)
http://www.tsinsen.com/ViewGProblem.page?gpid=A1339
题解:https://blog.csdn.net/LOI_DQS/article/details/51251737
对着题解A掉了。。。然而并不知道为什么要这么转化问题。。。
复杂度nlog^2n级别吧
#include<cstdio>
#include<algorithm>
#include<map>
#include<cmath>
#define fi first
#define se second
#define md 1000000007
using namespace std;
typedef long long LL;
typedef pair<int,int> P;
int a[],d[],nxt[],pos[],len;
bool vis[];
int prime[];
bool fir[];
void dprime(int x,map<int,int> &ma)
{
ma.clear();
if(x<=) return;
int i,end=floor(sqrt(x+0.5));
for(i=;prime[i]<=end;i++)
while(x!=prime[i])
{
if(x%prime[i]==)
{
ma[prime[i]]++;
x/=prime[i];
}
else
break;
}
ma[x]++;
}
int n,qq;
namespace S
{
#define mid (l+((r-l)>>1))
#define lc (num<<1)
#define rc (num<<1|1)
int dat[];
void build(int l,int r,int num)
{
if(l==r){dat[num]=fir[l]?d[l]:;return;}
build(l,mid,lc);build(mid+,r,rc);
dat[num]=LL(dat[lc])*dat[rc]%md;
}
int L,R,x;
void upd(int l,int r,int num)
{
if(l==r) {dat[num]=x;return;}
if(L<=mid) upd(l,mid,lc);
else upd(mid+,r,rc);
dat[num]=LL(dat[lc])*dat[rc]%md;
}
int que(int l,int r,int num)
{
if(L<=l&&r<=R) return dat[num];
int ans=;
if(L<=mid) ans=LL(ans)*que(l,mid,lc)%md;
if(mid<R) ans=LL(ans)*que(mid+,r,rc)%md;
return ans;
}
#undef mid
#undef lc
#undef rc
}
int poww(int a,int b)
{
LL ans=,base=a;
for(;b;base=base*base%md,b>>=)
if(b&)
ans=ans*base%md;
return ans;
}
struct Q
{
int l,r,num,ans;
}q[];
bool operator<(const Q &a,const Q &b) {return a.l<b.l||(a.l==b.l&&a.r<b.r);}
bool cmp(const Q &a,const Q &b) {return a.num<b.num;}
int main()
{
int i,j,t;map<int,int> tans;
map<int,int>::iterator it;
for(i=;i<=;i++)
{
if(!vis[i]) prime[++prime[]]=i;
for(j=;j<=prime[]&&i*prime[j]<=;j++)
{
vis[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
scanf("%d%d",&n,&qq);
for(i=;i<=n;i++)
{
scanf("%d",&t);dprime(t,tans);
for(it=tans.begin();it!=tans.end();it++)
for(j=;j<=it->second;j++)
++len,a[len]=poww(it->first,j),d[len]=it->first;
pos[i]=len;
}
tans.clear();
for(i=;i<=len;i++)
{
if(!tans[a[i]]) fir[i]=;
else nxt[tans[a[i]]]=i;
tans[a[i]]=i;
}
S::build(,len,);
for(i=;i<=qq;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].num=i,q[i].l=pos[q[i].l-]+,q[i].r=pos[q[i].r];
sort(q+,q+qq+);
for(i=,j=;i<=qq;i++)
{
for(;j<q[i].l;)
{
if(nxt[j])
{
S::L=nxt[j];S::x=d[nxt[j]];S::upd(,len,);
}
++j;
}
S::L=q[i].l;S::R=q[i].r;
q[i].ans=S::que(,len,);
}
sort(q+,q+qq+,cmp);
for(i=;i<=qq;i++) printf("%d\n",q[i].ans);
return ;
}
清橙A1339. JZPLCM(顾昱洲)的更多相关文章
- 【刷题】清橙 A1339 JZPLCM(顾昱洲)
试题来源 2012中国国家集训队命题答辩 问题描述 给定一长度为n的正整数序列a,有q次询问,每次询问一段区间内所有数的lcm(即最小公倍数).由于答案可能很大,输出答案模1000000007. 输入 ...
- 清橙A1212:剪枝
题面 清橙 Sol 一种新的树上\(DP\)姿势 从左往右按链\(DP\) 做法: 维护两个栈\(S1\),\(S2\) \(S1\)存当前的链 \(S2\)存分叉点以下要改的链 \(Dfs\),弄一 ...
- 清橙A1202&Bzoj2201:彩色圆环
因为Bzoj是权限题,所以可以去清橙做一下 Sol 突然考了一道这样的题,考场上强行\(yy\)出来了 win下评测Long double爆零TAT 首先肯定是破环为链变成序列问题辣 那么就要求第一个 ...
- [清橙A1210]光棱坦克
[清橙A1210]光棱坦克 题目大意: 平面上放置了\(n(n\le7000)\)个反射装置,光纤将从某个装置出发,在经过一处装置时发生反射,若经过的装置坐标依次为\((x_1,y_1),(x_2,y ...
- 清橙A1206.小Z的袜子 && CF 86D(莫队两题)
清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问 ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- 清橙 A1206 小Z的袜子(莫队算法)
A1206. 小Z的袜子 时间限制:1.0s 内存限制:512.0MB 总提交次数:1357 AC次数:406 平均分:46.75 将本题分享到: 查看未格式化的试题 ...
- 清橙A1363. 水位 - 清华大学2012年信息学优秀高中学子夏令营
问题描述 有一个正方形的地区,该地区特点鲜明:如果把它等分为N×N个小正方形格子的话,在每个格子内的任意地点的地表高度是相同的,并且是一个0到M之间的整数.正方形地区的外部被无限高的边界包围. 该地区 ...
- 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
题目地址:http://oj.tsinsen.com/A1120 问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但 ...
随机推荐
- VC++ 学习笔记(四):停止还是暂停这个系列
我已经很久没有更新这个话题了,原因是多方面的,比如比较忙,比如我参与的项目不使用C++.最近因为需要在C#的客户端中调用第三方的C++API,又想起了这个话题.在跟公司里的C++方面专家聊过之后,我有 ...
- (org.openqa.selenium.WebDriverException: Unable to launch the app: Error: Trying to start logcat capture but it's already started! )错误解决办法
新增: capabilities.setCapability("autoLaunch",false); 将setup中的: driver = new AndroidDriver(n ...
- 代码书写C++ 中调用传递与指针传递根本区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变.而引用是一个别名,它在逻辑上不是独立的,它的存在具有依 ...
- MapReduce算法形式一:WordCount
MapReduce算法形式一:WordCount 这种形式可以做一些网站登陆次数,或者某个电商网站的商品销量啊诸如此类的,主要就是求和,但是求和之前还是要好好清洗数据的,以免数据缺省值太多,影响真实性 ...
- Cocos Console命令总结
1. 工程创建 使用Cocos Console创建工程非常简单,安装完cocos命令之后,只需要在需要创建工程的目标目录下打开终端或命令行工具,输入下面的命令即可: cocos new -l js P ...
- Hibernate commit() 和flush() 的区别
<<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flus ...
- Delphi之萝莉调教篇
本文纯属技术交流.如果各位看官想与小生一起探讨萝莉的问题的话...PM我吧 关于Delphi的萝莉调教技术,很久以前就有大牛做过了...其实技术早掌握了只是觉得太无聊~估计大家也都会于是就没有写~既然 ...
- 在C语言中使用libiconv进行编码转换的示例
libiconv_sample.c #include <stdio.h> #include <malloc.h> #include "libiconv/iconv.h ...
- linux shell 突破
targetDate=$(cat maxdayid); targartMonth=${targetDate::}; targartYear=${targetDate::}; echo $targart ...
- Windows 7 繁体中文MSDN原版
Win7 SP1 64位旗舰版繁体版ISO镜像(香港):文件名:hk_windows_7_enterprise_with_sp1_x64_dvd_620688.isoSHA1:82D59B099333 ...