题目链接:《夏摩山谷》 - 洛谷

题目背景

“只要结局完美,过去的种种都算好。” ——《山茶文具店》

题目描述

波波店主收到这样一份代笔
她被要求写下一个仅仅包含 00 到 99 字符串 ss ,但是她可能会对其中的一些数字不是很满意,会经常对某些位置重新修改
而这位顾客会经常来询问店主字符串 ss 下标从 xx 到 yy 形成的十进制数在模 10^9+7109+7 下是多少
店主对修改很适从,但是顾客的奇奇怪怪问题她就没办法解决了,请你帮她解决这个问题

输入格式

第一行一个整数 nn 和一个整数 qq,代表店主的字符串长度以及操作次数(操作包含修改和询问)
接下来一行是一个字符串 ss,代表店主写下的起始字符串
然后是 qq 行操作,opop xx yy

  • op=1op=1:店主修改字符串下标 xx 的位置为 yy
  • op=2op=2:顾客询问字符串 ss 下标从 xx 到 yy 形成的十进制数在模 10^9+7109+7 下是多少

字符串下标从 11 开始
每次修改会将字符串 ss 变成一个新的字符串,即下一次修改是在此基础上进行再次修改

输出格式

对于每次查询,输出一个数,表示字符串 ss 下标从 xx 到 yy 形成的十进制数在模 10^9+7109+7 下的数

输入输出样例

输入 #1复制

5 7
12345
2 1 5
2 2 3
1 2 1
2 1 5
2 2 3
1 5 1
2 1 5

输出 #1复制

12345
23
11345
13
11341

说明/提示

1\le n\le 10^51≤n≤105
1\le q\le 10^51≤q≤105
操作11:1\le x\le n,0\le y\le 91≤x≤n,0≤y≤9
操作22:1\le x\le y\le n1≤x≤y≤n


样例说明

第一次修改之前的两次询问,都是 s=12345s=12345 下的询问
询问11:[12345][12345]
询问22:1[23]451[23]45
第一次修改之后,s=11345s=11345
询问44:[11345][11345]
询问55:1[13]451[13]45
第二次修改之后,s=11341s=11341
询问77:[11341][11341]

思路:在更新的时候,我们观察u的左右子树和u有什么关系

比如u=12,那么左子树的sum就是1,右子树的sum就是2

那么u的sum就是左子树的sum*10的(右子树的长度)次幂+右子树的sum

void pushup(int u){ll len=tr[u<<1|1].r -tr[u<<1|1].l +1;tr[u].sum =(tr[u<<1].sum *ksm(10,len,mod)%mod+tr[u<<1|1].sum )%mod;
}

单点修改和建树操作还是按板子来就行

对查询操作我们要注意

当我们查询的u的区间被完全包含在我们需要查询的l-r中时

其实得到的值是u的sum*10的(r-u的r)次幂

比如12345

假设我们查的区间是2-5,但是当前结点的区间是2-3,那么我们应该得到的是2300

如果u不被l-r包含的话分别看看与左右子树有没有交集所得值相加就行了(因为左子树的权值我们在完全包含时就处理过了,直接加就行不用乘长度)

ll query(int u,int l,int r){if(l<=tr[u].l &&r>=tr[u].r ){ll len=r-tr[u].r ;return tr[u].sum *ksm(10,len,mod)%mod;}else{int mid=tr[u].l +tr[u].r >>1;ll v1=0,v2=0;if(l<=mid)v1=query(u<<1,l,r);if(r>mid)v2=query(u<<1|1,l,r);return (v1+v2)%mod;}
}

注意一下这个细节之后就可以ac啦~

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
const ll mod=1e9+7;
int n,m;
string a;
ll ksm(ll a,ll b,ll p){ll res=1%p;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}return res;
}
struct name{int l,r;ll sum;
}tr[N*4];
void pushup(int u){ll len=tr[u<<1|1].r -tr[u<<1|1].l +1;tr[u].sum =(tr[u<<1].sum *ksm(10,len,mod)%mod+tr[u<<1|1].sum )%mod;
//  cout<<"l=="<<tr[u<<1].sum <<" r=="<<tr[u<<1|1].sum <<" sum=="<<tr[u].sum <<endl;
}
void build(int u,int l,int r){if(l==r){int op=a[l]-'0';tr[u]={l,r,op};}else{tr[u]={l,r,0};int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u);}
}
void modify(int u,int x,int v){if(tr[u].l ==x&&tr[u].r ==x){tr[u].sum =v;}else{int mid=tr[u].l +tr[u].r >>1;if(x<=mid)modify(u<<1,x,v);else modify(u<<1|1,x,v);pushup(u);}
}
ll query(int u,int l,int r){if(l<=tr[u].l &&r>=tr[u].r ){ll len=r-tr[u].r ;return tr[u].sum *ksm(10,len,mod)%mod;}else{int mid=tr[u].l +tr[u].r >>1;ll v1=0,v2=0;if(l<=mid)v1=query(u<<1,l,r);if(r>mid)v2=query(u<<1|1,l,r);return (v1+v2)%mod;}
}
void sove(){scanf("%d%d",&n,&m);cin>>a;a=" "+a;build(1,1,n);while(m--){int op,l,r;scanf("%d%d%d",&op,&l,&r);if(op==1){modify(1,l,r);}else{cout<<query(1,l,r)<<endl;}}
}
int main(){int t=1;
//  scanf("%d",&t);while(t--){sove();}return 0;
}

T225362 《山茶文具店》相关推荐

  1. 031 《山茶文具店》读后感

    看书名就大概能感觉是作者是日本人,不知道为什么. 这本书,是在读书小队的任务中看到的,也不晓得为什么,就是觉得想看下这类书籍.书信,感觉好熟悉又好陌生.回想年少时,也曾写过几封书信,真正意义上的书信. ...

  2. java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计

    java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计 java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计 本源码技术栈: 项目架构:B/S架构 开发语 ...

  3. wpf中图片滚动效果demo_如何将商品视觉化运用到店铺中?小型文具店货架效果图文具店货架图片...

    开一家小店,守一纸书香,是我的一个小小的愿望.2014年也曾开过饮食店,因为不喜欢,还因为一些特殊原因最终以转让收场.2015年找了个单位,朝八晚五的上了一年班,每天重复着无聊的日子,又感觉生活没了动 ...

  4. 1598 - 文具店的折扣

    题目描述 花花去文具店买了 1 支笔和 1 块橡皮,已知笔x元/ 支,橡皮 y 元 / 块,文具店今天有活动,可以给顾客打 9 折(用购买总价 ×0.9),花花付给了老板 n 元,请问老板应该找给花花 ...

  5. 简单的文具店库存管理系统

    这个简单的库存管理系统适合文具店个体老板使用,一共设计了三张表,第一张表存放主数据库存清单,库存清单里面有商品条码和商品图片,商品条码可以通过word打印出来贴在商品包装上面:第二张表存放事务数据出入 ...

  6. 计算机办公店,办公用品和电脑数码店面装修效果图 2016办公文具店门面及室内布置摆放设计图...

    办公用品和电脑数码店面装修效果图 2016办公文具店门面及室内布置摆放设计图 办公用品店面装修,红白搭配的两种色系,对比鲜明又能体现和谐共存.四层柜体中间采用红色隔板设计,两侧选用白色立柜,这种搭配可 ...

  7. 钢笔墨水能否代替打印机墨水_日本兔村文具店的原创文具钢笔墨水温柔如诗的美好设计...

    日本文具一向是以有设计感与品质出名的,无论是小孩最喜欢的Sun-Star文具( サンスター),或是文青喜爱的HOBONICHI手帐(ほぼ日手帐),都各有爱好者,而今天要介绍的则是由设计师原创的文具品牌 ...

  8. 文具店的火热不再,还有什么办法可以帮助文具店崛起?

    点击蓝字,关注我们 曾经的文具店的生意很好,一到放学就会有很多的小孩子跑到文具店买东西看东西,文具店不仅仅只有文具,还有零食.漫画.小说.小玩具等等,十分地吸引孩子的注意力.但是随着互联网技术的发展, ...

  9. C语言:【入门】文具店的折扣

    题目描述 花花去文具店买了1支笔和1块橡皮,已知笔x元/支,橡皮y元/块,文具店今天有活动,可以给顾客打9折(用购买总价 * 0.9),花花付给了老板n元,请问老板应该找给花花多少钱? 输入 三个整数 ...

最新文章

  1. python循环语句for求和_for循环简介
  2. python中itsdangerous模块
  3. csgo 机器人模式_分享一个休闲模式机器人Bug
  4. Mac安装oracleVM VMware安装失败,解决方案
  5. python编程(ply库)
  6. 循环队列的实现笔记-c++
  7. 两个辅助指针变量挖字符串
  8. ImportError: cannot import name ‘XGBClassifier‘
  9. FreeCAD快速开始
  10. C++多线程detach函数使用
  11. linux设置字符编码gbk,CentOS修改默认字符编码为GBK
  12. 以字母Q为元素的创意logo设…
  13. Aleo Wagyu钱包
  14. 剑灵力士卡刀ahk_剑灵召唤一键卡刀代码使用图文教程
  15. Java后端通过代理服务器请求网络资源
  16. iFIX 6.1新功能之 - OPC UA Client Driver
  17. 国产手游在日本是如何破除“加拉帕戈斯效应”的
  18. ERP系统31.83版本发布,八大新功能助力企业管理
  19. web端自动化测试--淘宝
  20. (01)ORB-SLAM2源码无死角解析-(01) 环境搭建,demo运行,ROS一键安装_清除各种疑难杂症

热门文章

  1. svn上传文件最大多少_svn限制上传文件大小
  2. 微信小程序的onLoad方法不执行
  3. 2013年-读书笔记
  4. java学习笔记1:第一个程序HelloWorld
  5. vijos 隐形的翅膀
  6. Unity3D Shader:动态翅膀
  7. 飘零无影 --------------我喜欢这个网名..
  8. 两台主机共用一个戴尔显示器之快速切换主机
  9. 车规级高性能服务器,芯驰高性能车规SoC平台介绍-汽车电子-与非网
  10. Unity物体 延着某个轴的方向 无法拖动