#根号分治,分块#洛谷 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的代码拍,拍了几万组就出来了... 思路 ...
随机推荐
- 在Windows10中安装解压版MySQL 8.X
在Windows 10中安装解压版的MySQL 8.X实现步骤: 1.下载MySQL安装包:https://dev.mysql.com/downloads/mysql/ 解压到指定目录,比如:D:\o ...
- Rock Pi开发笔记(三):Rock Pi 4B plus(基于瑞星微RK3399)板子硬件资源介绍
前言 上一篇,概览了整个的rock pi大致系列,我们开始定位为RK3399做评估,入手RK3399,对基本的外设进行解说. 板载外设 USB3.0 × 2 USB2.0 × 2 千 ...
- locals()用法
views.py代码 def test(request): if request.method == 'GET': return render(request,'test.html') elif re ...
- 在Directory.Build.props中用全局变量来管理包的版本号
1.顶级目录下放置Directory.Build.props文件 为每个软件产品,分配一块独立的windows盘符,在根目录下放置名为Directory.Build.props的文件即可.这个文件名是 ...
- Redis灵魂11问
目录 说说redis都有哪些数据类型吧 Redis为什么快呢? 那为什么Redis6.0之后又改用多线程呢? 知道什么是热key吗?热key问题怎么解决? 什么是缓存击穿.缓存穿透.缓存雪崩? 缓存击 ...
- Java HashMap 详解
HashMap HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null.因为 key 不允许重复,因此只能有一个键为 nu ...
- 隐藏在 Nebula Graph 背后的星辰大海
本文首发于 Nebula Graph Community 公众号 作者介绍 大家好,我是 Anyzm,graph-ocean(GitHub:https://github.com/nebula-cont ...
- BeanShell Sample 如何使用?
一 引入: eanShell Sample主要用于生成一些逻辑复杂的数据,例如用于加解密数据: **每次调用前重置bsh.Interpreter:每个BeanShell副本都有自己的解释器副本(每个线 ...
- aardio 代码格式化 自动保存 自定义 ctrl + s bug:这个快捷键是全局拦截
aardio 代码格式化工具 https://gitee.com/pengchenggang/aardio---code-formatting-tool 修改内容 1 代码进行了一定的修改,默认ctr ...
- SelectZenEmpty 下拉框 支持 最大长度 超出... vue 组件
<template> <Select v-model="innerValue" :disabled="disabled" :clearable ...