loj2053 「HNOI2016」大数
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll p, su[100005], sv[100005], ans[100005];
int n, m, uu, vv, ww, cnt[100005], blc, bel[100005];
char ss[100005];
struct Node{
int ll, rr, id;
}q[100005];
void qwq(){
for(int i=1; i<=n; i++){
su[i] = su[i-1];
sv[i] = sv[i-1];
if((ss[i]-'0')%p==0){
su[i] += i;
sv[i]++;
}
}
while(m--){
scanf("%d %d", &uu, &vv);
printf("%lld\n", su[vv]-su[uu-1]-(uu-1)*(sv[vv]-sv[uu-1]));
}
}
bool cmp(Node x, Node y){
if(bel[x.ll]!=bel[y.ll]) return bel[x.ll]<bel[y.ll];
if(bel[x.ll]&1) return x.rr<y.rr;
else return x.rr>y.rr;
}
void pwp(){
ll t=1, now=0;
blc = sqrt(n+1);
for(int i=n; i; i--){
su[i] = (su[i+1] + (ss[i] - '0') * t) % p;
t = t * 10 % p;
sv[++ww] = su[i];
bel[i] = (i - 1) / blc + 1;
}
n++;
su[n+1] = 0;
sv[++ww] = 0;
sort(sv+1, sv+1+ww);
ww = unique(sv+1, sv+1+ww) - (sv + 1);
for(int i=1; i<=n; i++)
su[i] = lower_bound(sv+1, sv+1+ww, su[i]) - sv;
for(int i=1; i<=m; i++){
scanf("%d %d", &q[i].ll, &q[i].rr);
q[i].rr++;
q[i].id = i;
}
sort(q+1, q+1+m, cmp);
int l=q[1].ll, r=l-1;
for(int i=1; i<=m; i++){
while(l<q[i].ll){
cnt[su[l]]--;
now -= cnt[su[l]];
l++;
}
while(l>q[i].ll){
l--;
now += cnt[su[l]];
cnt[su[l]]++;
}
while(r<q[i].rr){
r++;
now += cnt[su[r]];
cnt[su[r]]++;
}
while(r>q[i].rr){
cnt[su[r]]--;
now -= cnt[su[r]];
r--;
}
ans[q[i].id] = now;
}
for(int i=1; i<=m; i++)
printf("%lld\n", ans[i]);
}
int main(){
cin>>p;
scanf("%s", ss+1);
n = strlen(ss+1);
cin>>m;
if(p==2 || p==5) qwq();
else pwp();
return 0;
}
loj2053 「HNOI2016」大数的更多相关文章
- 「HNOI2016」大数
题目描述 给定一个质数\(p\)和一个数字序列,每次询问一段区间\([l,r]\), 求出该序列区间\([l,r]\)内的所有子串,满足该子串所形成的数是\(p\)的倍数(样例的解释也挺直观的) 基本 ...
- 「HNOI2016」数据结构大毒瘤
真是 \(6\) 道数据结构毒瘤... 开始口胡各种做法... 「HNOI2016」网络 整体二分+树状数组. 开始想了一个大常数 \(O(n\log^2 n)\) 做法,然后就被卡掉了... 发现直 ...
- 「HNOI2016」树 解题报告
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写 ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- 「HNOI2016」网络 解题报告
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这 ...
- 「HNOI2016」最小公倍数 解题报告
「HNOI2016」最小公倍数 考虑暴力,对每个询问,处理出\(\le a,\le b\)的与询问点在一起的联通块,然后判断是否是一个联通块,且联通块\(a,b\)最大值是否满足要求. 然后很显然需要 ...
- loj #2051. 「HNOI2016」序列
#2051. 「HNOI2016」序列 题目描述 给定长度为 n nn 的序列:a1,a2,⋯,an a_1, a_2, \cdots , a_na1,a2,⋯,an,记为 a[1: ...
- 【LOJ】#2052. 「HNOI2016」矿区
题解 之前尝试HNOI2016的时候弃坑的一道,然后给补回来 (为啥我一些计算几何就写得好长,不过我写啥都长orz) 我们尝试给这个平面图分域,好把这个平面图转成对偶图 怎么分呢,我今天也是第一次会 ...
- loj#2049. 「HNOI2016」网络(set 树剖 暴力)
题意 题目链接 Sol 下面的代码是\(O(nlog^3n)\)的暴力. 因为从一个点向上只会跳\(logn\)次,所以可以暴力的把未经过的处理出来然后每个点开个multiset维护最大值 #incl ...
随机推荐
- Javascript Functions
Javascript 全局对象 全局属性和函数可用于所有内建的Javascript对象 顶层函数(全局函数) decodeURI()解码某个编码的URI. decodeURIComponent()解码 ...
- python基础-字符串操作
输出高亮 语法: 显示方式.前景色.背景色至少一个存在即可. 显示方式:0(关闭所有效果),1(高亮),4(下划线),5(闪烁),7(反色),8(不可见). 前景色以3开头,背景色以4开头,具体颜 ...
- linux 下源码编译环境配置
yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel \ fontconfig fo ...
- node18 服务器上 pytorch cyclegan 测试有问题,numpy 版本不对
提示如下错误: module compiled against API version 0xb but this version of numpy is 0xa 尝试的方法: pip install ...
- cms-后台eazyui搭建
1.引入eazyUi需要的js 2.布局:上.下.左.中 <%@ page language="java" contentType="text/html; char ...
- 用rem实现h5页面的编写
一 静态页面的布局 将这段代码加到script中 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orienta ...
- linux 命令——43 killall(转)
Linux 系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进 程,如果要找到我们需要杀死的进程,我们还需 ...
- POJ 2392 Space Elevator(多重背包)
显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...
- python_43_移动文件指针补充
#移动文件指针补充 ''' 文件对象.seek((offset,where)) offset:移动的偏移量,单位为字节.等于正数时向文件尾方向移动,等于负数时向文件头方向移动文件指针 where:指针 ...
- JS中的async/await的执行顺序详解
虽然大家知道async/await,但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 JavaScript 的 async/await(如果对async/await不熟悉 ...