题面链接

洛谷

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. TensorFlow Python3.7环境下的源码编译(二)安装配置

    源代码树的根目录中包含了一个名为 configure 的 bash 脚本. $ ./configure 接下来,配置系统会给出各种询问,以确认编译时的配置参数.   一.重要参数解释 Please s ...

  2. JDBC Mysql 驱动连接异常

    在做JDBC连接Mysql的时候遇到了三个异常: 第一个是:mysql8.0 caching_sha2_password 这个异常是由于是因为在mysql8.0之前的密码规则是mysql_native ...

  3. springboot 前后端分离开发 从零到整(二、邮箱注册)

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: ...

  4. trampoline蹦床函数解决递归调用栈问题

    递归函数的调用栈太多,造成溢出,那么只要减少调用栈,就不会溢出.怎么做可以减少调用栈呢?就是采用"循环"换掉"递归". 下面是一个正常的递归函数. functi ...

  5. POJ 3164 Sunscreen (挑战程序设计竞赛的练习题)

    题目:https://vjudge.net/problem/POJ-3614 思路参考这个:https://blog.csdn.net/qq_25576697/article/details/7657 ...

  6. nodejs ejs模板数据库操作

    1. 建立数据连接setting.js var settings = {}; settings.db = { host: 'localhost', user: 'root', password: '1 ...

  7. Beta周王者荣耀交流协会第一次Scrum会议

    1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王超 2.时间跨度: 2017年11月10日 15:10 — 15:50 ,总计40分钟. 3.地 点: 一食 ...

  8. Final冲刺贡献分

    小组名称:Hello World! 项目名称:空天猎 组长:陈建宇 成员:刘成志.刘耀泽.刘淑霞.黄泽宇.方铭.贾男男 一.贡献分数规则: (1)基础分:5 , 4 ,4 , 3 , 2 ,2 ,1. ...

  9. No.101_第二次团队会议

    时间的敲定 在这一次的会议中,明确了任务目标,将任务进行合理分配,并且规划了整个任务的时间节点,这对团队来说非常重要. 一.最终项目 在上一节课的时候,我们最终没有拿到学霸开发项目,最后爬虫也被选走了 ...

  10. 20172325 2017-2018-2 《Java程序设计》第五周学习总结

    20172325 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.布尔表达式的值只有真或假,表达式的结果决定了下一步将要执行的语句. 2.循环语句可以用在 ...