玲珑杯 1153 - 无影的神之右手 莫队

2024-03-16 05:20
文章标签 莫队 玲珑 无影 右手 1153

本文主要是介绍玲珑杯 1153 - 无影的神之右手 莫队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://www.ifrog.cc/acm/problem/1153

1153 - 无影的神之右手

Time Limit:4s Memory Limit:512MByte

Submissions:183Solved:14

DESCRIPTION




觉不觉得这几个图很有毒啊?
其实这几个不算很有毒吧~
由乃懒得写题面了,反正写了也没人看,所以直接说题意吧~
给你一个序列a,每次查询一个区间[l,r]的乘积的约数个数mod 19260817

INPUT
第一行两个数n,m 第二行n个数表示序列a 后面m行每行两个数l,r表示查询区间[l,r]
OUTPUT
对于每个查询输出答案
SAMPLE INPUT
5 5 64 2 18 9 100 1 5 2 4 2 3 1 4 3 4
SAMPLE OUTPUT
165 15 9 45 10
HINT
n , m <= 100000 , a[i] <= 1000000
SOLUTION
“玲珑杯”ACM比赛 Round #20

思路:显然ans利用约数和定理求,约数和定理链接;

  sqrt(a[i])=1000,

  对于小于1000的素数,利用前缀和,复杂度m*168(素数总个数);

  对于大于1000的素数,一个数最多有一个这样的素数,利用莫队算法,求区间每个数的个数+1的乘积,莫队裸题;复杂度O(m*sqrt(n));

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define LL long long
const int N=1e5+100,M=1e6+10,inf=1e9+10;
const LL INF=1e18+10,mod=19260817;int inv[M],mp[M];void inverse(int n, int p) {inv[1] = 1;for (int i=2; i<=n; ++i) {inv[i] = (LL) (p - p / i) * inv[p%i] % p;}
}
int pos[N],a[N];
LL out,ans[N];
struct is
{int l,r,now;bool operator < (const is &a)const{if(pos[l]!=pos[a.l])return pos[l]<pos[a.l];return r<a.r;}
} s[N];
void add(int x)
{if(a[x]==1)return;out*=inv[mp[a[x]]+1];out%=mod;mp[a[x]]++;out*=mp[a[x]]+1;out%=mod;
}void del(int x)
{if(a[x]==1)return;out*=inv[mp[a[x]]+1];out%=mod;mp[a[x]]--;out*=mp[a[x]]+1;out%=mod;
}int ssp[N][200],sum[N][200];vector<int>pr;
int vis[N];
void init()
{for(int i=2;i<=1000;i++){if(!vis[i])pr.push_back(i);for(int j=i+i;j<=1000;j+=i)vis[j]=1;}
}
int main()
{inverse(1000000,19260817);init();//cout<<pr.size()<<endl;int n,m;while(~scanf("%d%d",&n,&m)){memset(mp,0,sizeof(mp));out=1;int k=sqrt(n);for(int i=1;i<=n;i++){pos[i]=(i-1)/k+1;scanf("%d",&a[i]);int temp=a[i];for(int j=0;j<pr.size();j++){if(temp%pr[j]==0){while(temp%pr[j]==0){temp/=pr[j];ssp[i][j]++;}}}for(int j=0;j<pr.size();j++)sum[i][j]=sum[i-1][j]+ssp[i][j];a[i]=temp;}for(int i=1;i<=m;i++){scanf("%d%d",&s[i].l,&s[i].r);s[i].now=i;}sort(s+1,s+1+m);int L=1,R=0;for(int i=1; i<=m; i++){while(R>s[i].r){del(R);R--;}while(R<s[i].r){R++;add(R);}while(L<s[i].l){del(L);L++;}while(L>s[i].l){L--;add(L);}LL q=1;for(int j=0;j<pr.size();j++){q*=sum[s[i].r][j]-sum[s[i].l-1][j]+1;q%=mod;}ans[s[i].now]=(out*q)%mod;}for(int i=1;i<=m;i++)printf("%lld\n",ans[i]);}return 0;
}

 

转载于:https://www.cnblogs.com/jhz033/p/7440331.html

这篇关于玲珑杯 1153 - 无影的神之右手 莫队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814419

相关文章

世链投研| Axie Infinity,如何做到了“左手游戏,右手赚钱”?

在上篇文章中,世链投研帮助大家全面解析了YGG的“前世今生”,想必大家对YGG有了一定的了解,更知道了YGG这家公会中的“扛把子选手”——Axie Infinity。 Axie Infinity不仅是YGG的重要构成,更是整个NFT游戏板块中的头部力量,其代币AXS更创造过一周之内暴涨300%的奇迹。所以今天,我们就和大家一起来聊聊,看看能够做到“大力出奇迹”的Axie Infinity,究竟有

【九度】题目1153:括号匹配问题

题目地址:http://ac.jobdu.com/problem.php?pid=1153 题目描述:     在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括

BZOJ 2038 小Z的袜子(hose) (莫队离线)

题目地址:BZOJ 2038 裸的莫队算法。 代码如下: #include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>#in

曼哈顿距离最小生成树与莫队算法

一、曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下: 给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价。 朴素的算法可以用O(N2)的Prim,或者处理出所有边做Kruskal,但在这里总边数有O(N2)条,所以Kruskal的复杂度变成了O(N2logN)。 但是事实上,真正有用的边远没有O(N2)条。我们考虑每个点会和其他一些什

用阿里云“无影”搭建《黑神话:悟空》电脑环境

目录 《黑神话:悟空》 阿里云无影试用版概述 阿里云无影云电脑试用版情况 具体详细过程(搭建环境) 《黑神话:悟空》 《黑神话:悟空》作为一款高品质的国产游戏,对硬件配置有一定的要求。根据公开发布的信息,该游戏的最低配置要求包括64位处理器和操作系统、Intel Core i5-8400或AMD Ryzen 5 1600处理器、NVIDIA GeForce GTX 1060

九度OJ-1153-括号匹配问题

此题乃学习使用stack模板第一题。收获了以下知识点:   ①pop()返回void,故想要获取栈顶并删除需要打出top+pop组合拳   ②stack模板申请出的对象长度是动态的,无需静态分配 题目链接:点击打开链接 题目描述:     在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹

亲测:无影云电脑免费三个月已经缩短为1个月

亲测:无影云电脑免费三个月已经缩短为1个月,大家不要再找3个月的无影云电脑,已经没有了,目前最新消息是1个月。以前可以领3个月,现在只能领1个月,在阿里云免费中心 https://free.aliyun.com/ 大家自己看吧,不用再找3个月时长了,现在就能申请一个月。

左手代码,右手是你

认识你是在 5 年前:成都,地铁2号线,白果林站,2014 年 2 月下旬 高高的,廋廋的,戴着一副莹润的眼镜,穿着一件并不太合身的、略宽松的羽绒服,安静的站在我们约定见面的地铁口 是的,第一眼看上去 你是这样的平凡,就像我一样:我心里悄悄的、莫名的很喜欢   我们都是来自农村的孩子,2个人都没有房子,没有车 你是你妈妈的第三个儿子,我也有姐姐,有弟弟 你的老家在湖南,而我是土生

zoj 1153 Tournament Seeding

太纠结了这题 题意: n个人淘汰制比赛,从最厉害到最差水平的人分别编号1~n 定义一场比赛强度为两个比赛者的编号之和,理想强度是尽可能让比赛强度最小,比赛顺序、对手依据此编排。 给出比赛强度m,求m最早可能出现在哪一轮比赛。(最下为第一轮,决赛为上取整logn轮) 方法: 比赛顺序和对手是一定的,按题目要求使比赛强度最小,预处理很重要。 match[i]表示 i 选手初始在第几

解放右手鼠标,效率实用神器 Autohotkey 利用 Capslock 键匹配 vim 键位| Autohotkey 脚本解决 onenote 上下键问题 | Capslock++

好多年前就用一个祖传 autohotkey 脚本来在所有地方用上 hjkl 来写字,最近因为 onenote uwp 要寿终正寝了,准备用回 office 的版本,结果想起来之前一直用 UWP 是因为 autohotkey 不支持 onenote win32 版本里面的上下键,最近查找了一下解决了这个问题; 这里备注一下防止以后弄丢这个脚本了。 首先是用法(自动热钥匙软件的教程自己百度一下很多