#根号分治,分块#洛谷 5309 [Ynoi2011] 初始化
分析
如果 \(x\) 比较大那么可以暴力修改,\(x\) 比较小的话可以用数组打标记
查询的时候对于暴力修改的部分可以分块,暴力修改的同时需要给块打标记
如果 \(x\) 比较小的情况,一段区间相当于是中间很多段周期加上前后缀(当然可以直接区间减但是我被卡常了)
我调的块长是160然后询问的时候开了long long最后取模,惊险卡过
代码
#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
const int N=200011,mod=1000000007;
int n,m,bl,a[N],s[1331],pre[161][161],suf[161][161],pos[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
void Mo(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
int query(int x,int y){
long long ans=0;
for (int i=1;i<=bl;++i){
int px=(x-1)/i+1,py=(y-1)/i+1;
int Px=(x-1)%i+1,Py=(y-1)%i+1;
if (px==py) ans+=pre[i][Py]-pre[i][Px-1];
else ans+=((py-px-1ll)*pre[i][i]+suf[i][Px]+pre[i][Py])%mod;
}
return (ans%mod+mod)%mod;
}
int main(){
n=iut(),m=iut(),bl=160;
for (int i=1;i<=n;++i){
a[i]=iut();
if (a[i]==mod) a[i]=0;
pos[i]=(i-1)/bl+1,Mo(s[pos[i]],a[i]);
}
for (int i=1;i<=m;++i)
if (iut()==1){
int x=iut(),y=iut(),z=iut();
if (z==mod) continue;
if (x>bl) for (int i=y;i<=n;i+=x) Mo(s[pos[i]],z),Mo(a[i],z);
else{
for (int i=y;i<=x;++i) Mo(pre[x][i],z);
for (int i=1;i<=y;++i) Mo(suf[x][i],z);
}
}else{
int l=iut(),r=iut();
long long ans=query(l,r);
if (pos[l]==pos[r]){
for (int j=l;j<=r;++j) ans+=a[j];
}else{
for (int j=l;j<=pos[l]*bl;++j) ans+=a[j];
for (int j=pos[l]+1;j<pos[r];++j) ans+=s[j];
for (int j=r;j>(pos[r]-1)*bl;--j) ans+=a[j];
}
print(ans%mod),putchar(10);
}
return 0;
}
#根号分治,分块#洛谷 5309 [Ynoi2011] 初始化的更多相关文章
- 从 洛谷P5309 Ynoi2011 初始化 看卡常
一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确. 但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的常数因子减少时间消耗. 比如这 ...
- BZOJ.4320.[ShangHai2006]Homework(根号分治 分块)
BZOJ \(\mathbb{mod}\)一个数\(y\)的最小值,可以考虑枚举剩余系,也就是枚举区间\([0,y),[y,2y),[2y,3y)...\)中的最小值(求后缀最小值也一样)更新答案,复 ...
- [CF587F]Duff is Mad[AC自动机+根号分治+分块]
题意 给你 \(n\) 个串 \(s_{1\cdots n}\) ,每次询问给出 \(l,r,k\) ,问在 \(s_{l\cdots r}\) 中出现了多少次 \(s_k\) . \(n,q,\su ...
- 【洛谷5309】[Ynoi2012] D1T1(分块)
点此看题面 大致题意: 两种操作,区间求和,将形如\(ax+y\)的位置的元素值加\(z\). 分块 这种题目显然就是按照\(x\)与\(\sqrt n\)的大小关系来分块. 对于\(x>\sq ...
- [CF1083F]The Fair Nut and Amusing Xor[差分+同余分类+根号分治+分块]
题意 给定两个长度为 \(n\) 的序列 \(\{a_i\}\) 与 \(\{b_i\}\),你需要求出它们的相似度.,我们定义这两个序列的相似度为将其中一个序列转化为另一个序列所需的最小操作次数.一 ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 洛谷 P6189 - [NOI Online #1 入门组]跑步(根号分治+背包)
题面传送门 题意: 求有多少个数列 \(x\) 满足: \(\sum x_i=n\) \(x_i\geq x_{i+1}\) 答案对 \(p\) 取模. ...你确定这叫"入门"组 ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- 洛谷P5309 Ynoi 2011 初始化 题解
题面. 我也想过根号分治,但是题目刷得少,数组不敢开,所以还是看题解做的. 这道题目要用到根号分治的思想,可以看看这道题目和我的题解. 题目要求处理一个数组a,支持如下操作. 对一个整数x,对数组长度 ...
- 洛谷P3085 [USACO13OPEN]阴和阳Yin and Yang(点分治,树上差分)
洛谷题目传送门 闲话 偶然翻到一道没有题解的淀粉质,想证明一下自己是真的弱 然而ZSYC(字符串组合)早就切了 然后证明成功了,WA到怀疑人生,只好借着ZSY的代码拍,拍了几万组就出来了... 思路 ...
随机推荐
- UTF-8 的理解
举个简单的例子: Unicode 只是一个业界标准,具体一个字符占多少字节,取决于编码方式,包括 UTF-8 UTF-16 GB2312 等 "汉" 在 UTF-8 中占到 3 个 ...
- 学习go语言编程之面向对象
类型系统 类型系统是指一个语言的类型体系结构,一个典型的类型系统通常包含如下基本内容: 基础类型,如:byte.int.bool.float等 复合类型,如:数组.结构体.指针等 可以指向任意对象的类 ...
- django中使用celery异步发送邮件
申请163网易发送邮件权限 在django中settings配置文件 #配置邮件服务器 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBac ...
- python枚举之Enum模块
枚举是与多个唯一常量值绑定的一组符号(即成员).枚举中的成员可以进行身份比较,并且枚举自身也可迭代. 枚举成员名称建议使用大写字母 # 示例 from enum import Enum,unique, ...
- java.lang.IllegalStateException: Failed to check the status of the service 的解决办法
参考资料 java.lang.IllegalStateException: Failed to check the status of the service 的解决办法_Hello_World_QW ...
- 用ABP Suite创建Blazor Server的应用程序
这个应用程序我们取名为BlazorOne,意思是集AuthServer.HttpApi Host和Blazor Server3个功能于一体的应用程序.因为ABP Suite支持另外一种模式,是把上述3 ...
- 旅游景点 Tourist Attractions (壮压 DP)题解
简化题意 题目链接--不卡内存班 题目链接--卡内存版 给定 \(n\) 个点和 \(m\) 条边组成的无向图,按照一定限制要求停留 \(2\sim k+1\) 共 \(k\) 个点(可以经过但不停留 ...
- 【Azure 存储服务】多设备并发往 Azure Storage Blob 的 Container 存数据是否可以
问题描述 多设备并发往 Azure Storage Blob 的 Container 存数据是否可以? 问题解答 可以! Azure Storage 是支持的并发存储数据的,Blob 可以使用乐观并发 ...
- 【Azure 应用服务】App Service与Application Gateway组合使用时发生的域名跳转问题如何解决呢?
问题描述 为App Service配置了应用服务网关(Application Gateway),并且为Application Gateway配置了自定义域名,通过浏览器访问时,出现域名跳转问题,由自定 ...
- 用 NetworkX + Gephi + Nebula Graph 分析<权力的游戏>人物关系(上篇)
我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜",当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 Ne ...