bzoj 4542: [Hnoi2016]大数 (莫队)
Description
小 B 有一个很大的数 S,长度达到了 N 位;这个数可以看成是一个串,它可能有前导 0,例如00009312345
。小B还有一个素数P。现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也
是P 的倍数)。例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007;显然0077的子串007有6个子串都是素
数7的倍数。
Input
第一行一个整数:P。第二行一个串:S。第三行一个整数:M。接下来M行,每行两个整数 fr,to,表示对S 的
子串S[fr…to]的一次询问。注意:S的最左端的数字的位置序号为 1;例如S为213567,则S[1]为 2,S[1…3]为 2
13。N,M<=100000,P为素数
Output
输出M行,每行一个整数,第 i行是第 i个询问的答案。
Sample Input
121121
3
1 6
1 5
1 4
Sample Output
3
2
//第一个询问问的是整个串,满足条件的子串分别有:121121,2112,11,121,121。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll M = 1e5 + ;
ll blo;
struct node{
ll id,l,r;
bool operator < (const node &k) const {
if(l/blo == k.l/blo) return r < k.r;
return l/blo < k.l/blo;
}
}q[M];
ll a[M],hs[M];
ll ba[M],ans[M];
char s[M];
map<ll,ll>mp; int main()
{
ll p,m,l=,r=;
scanf("%lld%s%lld",&p,s+,&m);
ll n = strlen(s+); blo = (ll)sqrt(n*1.0);
if(p != &&p != ){
ll num = ;
for(ll i = n;i >= ;i --){
a[i] = (a[i+]+(s[i]-)*num)%p;
num = num*%p;
hs[i] = a[i];
}
sort(hs+,hs++n);
ll siz = unique(hs+,hs++n)-hs-;
for(int i = ;i <= n+;i ++)
a[i] = lower_bound(hs+,hs++siz,a[i])-hs;
for(ll i = ;i <= m;i ++){
scanf("%lld%lld",&q[i].l,&q[i].r);
q[i].id = i; q[i].r ++;
}
sort(q+,q+m+);
ll cnt = ;
for(ll i = ;i <= m;i ++){
while(r < q[i].r) cnt += ba[a[++r]]++;
while(l > q[i].l) cnt += ba[a[--l]]++;
while(l < q[i].l) cnt -= --ba[a[l++]];
while(r > q[i].r) cnt -= --ba[a[r--]];
ans[q[i].id] = cnt;
}
for(ll i = ;i <= m;i ++)
printf("%lld\n",ans[i]);
}
else{
for(ll i = ;i <= n;i ++){
if(!((s[i]-)%p))
ba[i] = ba[i-]+,hs[i] = hs[i-]+i;
else
ba[i] = ba[i-],hs[i] = hs[i-];
}
for(ll i = ;i <= m;i ++){
scanf("%lld%lld",&l,&r);
printf("%lld\n",hs[r]-hs[l-]-(ba[r]-ba[l-])*(l-));
}
}
}
bzoj 4542: [Hnoi2016]大数 (莫队)的更多相关文章
- BZOJ.4542.[HNOI2016]大数(莫队)
题目链接 大数除法是很麻烦的,考虑能不能将其条件化简 一段区间[l,r]|p,即num[l,r]|p,类似前缀,记后缀suf[i]表示[i,n]的这段区间代表的数字 于是有 suf[l]-suf[r+ ...
- 【BZOJ4542】[Hnoi2016]大数 莫队
[BZOJ4542][Hnoi2016]大数 Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个 ...
- BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]
4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...
- [BZOJ4542] [Hnoi2016] 大数 (莫队)
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)
BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...
- BZOJ 4540 [Hnoi2016]序列 | 莫队 详细题解
传送门 BZOJ 4540 题解 --怎么说呢--本来想写线段树+矩阵乘法的-- --但是嘛--yali的机房太热了--困--写不出来-- 于是弃疗,写起了莫队.(但是我连莫队都想不出来!) 首先用单 ...
- bzoj4542 [Hnoi2016]大数 莫队+同余
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4542 题解 我们令 \(f_i\) 表示从 \(i\) 到 \(n\) 位组成的数 \(\bm ...
- bzoj 4542: [Hnoi2016]大数
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345 小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- 洛谷P3245 [HNOI2016]大数(莫队)
题意 题目链接 Sol 莫队板子题.. 维护出每个位置开始的字符串\(mod P\)的结果,记为\(S_i\) 两个位置\(l, r\)满足条件当且仅当\(S_l - S_r = 0\),也就是\(S ...
随机推荐
- Node 系列之path模块
//引用该模块 var path = require("path"); 1.路径解析,得到规范化的路径格式 //对window系统,目录分隔为'\', 对于UNIX系统,分隔符为' ...
- Django 生成验证码或二维码 pillow模块
一.安装PIL PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,API也非常简单易用. PIL模块只支持到Python 2 ...
- 多线程系列之八:Thread-Per-Message模式
一,Thread-Per-Message模式 翻译过来就是 每个消息一个线程.message可以理解为命令,请求.为每一个请求新分配一个线程,由这个线程来执行处理.Thread-Per-Message ...
- #Leetcode# 524. Longest Word in Dictionary through Deleting
https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/ Given a string and a stri ...
- Jmeter使用笔记之html报告扩展(一)
题记:在用loadrunner的时候可以生成一个HTML的报告,并且里面包含各种图表,各种详细的数据.而在使用Jmeter测试完后并不能直接生成Html 的报告(无论是用GUI还是命令行启动). 经过 ...
- 关于Fatal error: Paletter image not supported by webp 报错
报错提示 Fatal error: Paletter image not supported by webp 原因是由于图片被非法编辑过(相对PHP来说)造成, 有可能是某些编辑图片的软件的格式与PH ...
- Auzre系列1.1.1 —— 安装用于 IntelliJ 的 Azure 工具包
(文中大部分内容(95%)Azure官网上有,我只是把我自己实际操作中遇到的问题在这里阐述一下.) 先决条件 若要完成文章中的步骤,需要安装用于 IntelliJ 的 Azure 工具包,该工具包需要 ...
- laravel添加model文件夹,需要改动的地方
首先,将app\User(等model文件),移入APP\modellists文件夹中,方便整理 第二,修改模型中命名空间和引用其他model的路径 第三,将文件夹app\admin中的控制器文件,全 ...
- k8s容器的资源限制
1.k8s支持内存和cpu的限制 requests:容器运行需求,最低保障limits:限制,硬限制(资源上限) CPU: 1颗逻辑CPU(1核CPU=4个逻辑CPU) 1物理核=1000个微核(mi ...
- Spring注解 系列之Spring常用注解总结
参考:Spring系列之Spring常用注解总结 (1) Resource 默认是byName的方式进行bean配置,@AutoWired默认是按照byType的方式进行装配bean的:(2)Comp ...