题面链接

洛谷

sol

我们先不考虑\(0\),发现数字根\(=\)它\(mod 9\)。

我们前缀和一波,把区间和变成两数相减。

对于每个\(v\in\{0-8\}\),(这里面的\(mod 9=0\)的相当于数字根为9),我们维护每个数\(a\)往后第一个可以和它组成\((b-a) mod 9=v\)的位置,称为\(OJBK\)位置。

那么对于一段区间,求出每个\(v\in\{0-8\}\)的最小\(OJBK\)位置,若它在区间里面,那么这段区间就可以组成这个\(v\)。

至于\(0\)我们特判一下区间内有没有\(0\),然后忽略\(0\)。

总复杂度\(O(9nlogn+9q)\)。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define gt getchar()
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
inline int in()
{
int k=0;char ch=gt;
while(ch<'-')ch=gt;
while(ch>'-')k=k*10+ch-'0',ch=gt;
return k;
}
const int N=1e5+5;
int c[N],a[N],st[10][N][20],las[10],lo[N],p[N];
inline int Get_mi(int x,int l,int r)
{
l=std::max(l,0),r=std::max(r,0);
if(l>r)return 0x3f3f3f3f;int k=lo[r-l+1];
return std::min(st[x][l][k],st[x][r-(1<<k)+1][k]);
}
int main()
{
int n=in(),tot=0;
for(int i=1;i<=n;++i)
{
int t=in();p[i]=t;
if(t){a[++tot]=t%9;continue;}
++c[i];
}
for(int i=1;i<=n;++i)c[i]+=c[i-1];
for(int i=1;i<=tot;++i)a[i]=(a[i]+a[i-1])%9;
for(int i=2;i<=tot;++i)lo[i]=lo[i>>1]+1;
for(int i=0;i<9;++i)
{
memset(las,0x3f,sizeof las);
for(int j=tot;~j;--j)
{
int res=(a[j]+i)%9;
st[i][j][0]=las[res];las[a[j]]=j;
}
for(int j=1;(1<<j)<=tot;++j)
for(int k=0;k+(1<<j)<=tot;++k)
st[i][k][j]=std::min(st[i][k][j-1],st[i][k+(1<<j-1)][j-1]);
}
int q=in();
while(q--)
{
memset(las,-1,sizeof las);
int L=in(),R=in(),cnt=0,l=L-c[L],r=R-c[R],fg=0;
if(R-L!=r-l)fg=1;if(!p[L])++l;
if(Get_mi(0,l-1,r-1)<=r)las[++cnt]=9;
for(int i=8;i;--i)
if(Get_mi(i,l-1,r-1)<=r)las[++cnt]=i;
if(fg)las[++cnt]=0;
for(int i=1;i<=5;++i)printf("%d ",las[i]);puts("");
}
return 0;
}

TJOI2013数字根的更多相关文章

  1. 洛谷 P3962 [TJOI2013]数字根 解题报告

    P3962 [TJOI2013]数字根 题意 数字根:这个数字每一位的数字加起来求和,反复这个过程直到和小于10. 给出序列\(a\),询问区间\([l,r]\)连续的子区间里最大前5个不同的数字根, ...

  2. Luogu P3962 [TJOI2013]数字根 st

    题面 我先对数字根打了个表,然后得到了一个结论:\(a\)的数字根=\((a-1)mod 9+1\) 我在询问大佬后,大佬给出了一个简单的证明: \(\because 10^n\equiv 1(mod ...

  3. 洛谷3962 [TJOI2013]数字根

    题目描述 一个数字的数字根定义为:这个数字每一位的数字加起来求和,反复这个过程直到和小于10.例如,64357的数字跟为7,因为6+4+3+5+7=25,2+5=7个区间的数字根定义为这个区间所有数字 ...

  4. 数字根(digital root)

    来源:LeetCode 258  Add Dights Question:Given a non-negative integer  num , repeatedly add all its digi ...

  5. 1. 数字根(Digital Root)

    数字根(Digital Root)就是把一个自然数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这个一位数便是原来数字的数字根.例如: 198的数字根为9(1+9+8=18,1 ...

  6. ACM之数论数字根

    先来看一道杭电的数字根问题 此题的大大意是输入一个数.假设它不是一位的数字的话,那么我们就将它的每一位都相加,相加后假设还是两位或者很多其它的话那么我们继续取出它的每一位数字进行相加.知道等到单个数字 ...

  7. LeetCode 258 Add Digits(数字相加,数字根)

    翻译 给定一个非负整型数字,反复相加其全部的数字直到最后的结果仅仅有一位数. 比如: 给定sum = 38,这个过程就像是:3 + 8 = 11.1 + 1 = 2.由于2仅仅有一位数.所以返回它. ...

  8. Digital root(数根)

    关于digital root可以参考维基百科,这里给出基本定义和性质. 一.定义 数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这 ...

  9. 递归练习(C语言)

    本文地址:http://www.cnblogs.com/archimedes/p/recursive-practice.html,转载请注明源地址. 1.炮弹一样的球状物体,能够堆积成一个金字塔,在顶 ...

随机推荐

  1. facebook和twitter的截图分享

    记录一下代码,以后自己可以抄..我抄我自己=.= SDK的接入看之前的博客.所以话不多少,直接上代码(记得分享一定要安装原生app(FB和twitter),不然只通过网页分享无法发图片.),初始化都在 ...

  2. Hadoop初步简介

    Hadoop产生背景: 传统方式,我们使用数据库来对数据进行管理.可是随着数据量的增加,我们要对这个数据库中的海量数据进行处理, 从中提取出有效的信息,这时候面临的问题随之而来: 1.海量数据读取,采 ...

  3. SSH免密登录(并且免yes交互)

    问题描述:主机A使用ssh协议远程主机B,默认会开启口令认证,即输入主机B对应用户的登录密码,并且第一次登录时,主机A需验证是否接受来自主机B的公钥,输入"yes/no"完成交互. ...

  4. Webrtc源码走读(一)

    阅读event_wrapper.h   event_wrapper_win.cpp 的实现 自己对“事件”这个词没有深的理解,通过看段代码,好像有点感觉,类似与C#的AutoResetEvent

  5. sqli-labs学习笔记 DAY4

    DAY 4 sqli-labs lesson 23 与lesson 1一样,只不过屏蔽了#和–注释符. 报错型注入: 爆库:id=99' UNION SELECT 1,extractvalue(1,c ...

  6. 详解HTTP缓存

    HTTP缓存是个大公司面试几乎必考的问题,写篇随笔说一下HTTP缓存. 1. HTTP报文首部中有关缓存的字段 在HTTP报文中,与缓存相关的信息都存在首部里,简单说一下首部. 首部 HTTP首部字段 ...

  7. No.0_Team C#

    杜正远 略宅,喜昼伏夜出,却又喜游山玩水.平日多出现于宿舍食堂实验室,其他地方鲜有涉足.热爱编程与电脑游戏,渴望自己能写一款自己喜欢玩的电脑游戏,并以此为目标. 喜欢研究算法,但不喜欢硬件.正在入门软 ...

  8. css方法div固定在网页底部

    css .bottom{width:%;height:40px;background:#ededed;;}/*重点后两句*/ body <div class="bottom" ...

  9. WebGL学习笔记三

    在上一章中主要说明了通过矩阵来实现平面图形的平移.旋转.缩放,到最后完全可以用4*4矩阵实现所有的动作,在本章就是第四章主要是对矩阵进行了封装,其WebGL的流程和上一章大部分大部分相同,定义可以在w ...

  10. 软工 · 第十二次作业 - Beta答辩总结

    福大软工 · 第十二次作业 - Beta答辩总结 写第十二次的时候操作失误直接在Beta版本的博客里改了...第七次冲刺的作业链接补在这里 Beta(7/7) 组长本次博客作业链接 项目宣传视频链接 ...