LOJ-6283-数列分块7
链接:
题意:
给出一个长为 的数列,以及 个操作,操作涉及区间乘法,区间加法,单点询问。
思路:
考虑整块的乘法, 同时对整块的add标记也要乘,对单点操作时, 注意要对整块暴力修改完再操作.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
//#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string>
#include <assert.h>
#include <iomanip>
#define MINF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e6+10;
const int MOD = 10007;
LL a[MAXN], TagMul[MAXN], TagAdd[MAXN];
int Belong[MAXN];
int n, part, last;
void Reset(int pos)
{
for (int i = (pos-1)*part+1;i <= pos*part;i++)
a[i] = ((a[i]*TagMul[pos])%MOD+TagAdd[pos])%MOD;
TagAdd[pos] = 0;
TagMul[pos] = 1;
}
void UpdateAdd(int l, int r, int c)
{
Reset(Belong[l]);
for (int i = l;i <= min(r, Belong[l]*part);i++)
a[i] = (a[i]+c)%MOD;
if (Belong[l] != Belong[r])
{
Reset(Belong[r]);
for (int i = max(l, (Belong[r]-1)*part+1);i <= r;i++)
a[i] = (a[i]+c)%MOD;
}
for (int i = Belong[l]+1;i <= Belong[r]-1;i++)
TagAdd[i] = (TagAdd[i]+c)%MOD;
}
void UpdateMul(int l, int r, int c)
{
Reset(Belong[l]);
for (int i = l;i <= min(r, Belong[l]*part);i++)
a[i] = (a[i]*c)%MOD;
if (Belong[l] != Belong[r])
{
Reset(Belong[r]);
for (int i = max(l, (Belong[r]-1)*part+1);i <= r;i++)
a[i] = (a[i]*c)%MOD;
}
for (int i = Belong[l]+1;i <= Belong[r]-1;i++)
{
TagMul[i] = (TagMul[i]*c)%MOD;
// cout << i << ' ' << TagMul[i] << endl;
TagAdd[i] = (TagAdd[i]*c)%MOD;
}
}
int Query(int l, int r, int c)
{
int p = Belong[r];
// cout << a[r] << ' ' << TagMul[p] << ' ' << TagAdd[p] << endl;
return ((a[r]*TagMul[p])%MOD+TagAdd[p])%MOD;
}
int main()
{
scanf("%d", &n);
part = sqrt(n);
for (int i = 1;i <= n;i++)
{
TagMul[i] = 1;
scanf("%lld", &a[i]);
Belong[i] = (i-1)/part+1;
}
int op, l, r, c;
for (int i = 1;i <= n;i++)
{
scanf("%d", &op);
if (op == 0)
{
scanf("%d%d%d", &l, &r, &c);
UpdateAdd(l, r, c);
}
else if (op == 1)
{
scanf("%d%d%d", &l, &r, &c);
UpdateMul(l, r, c);
}
else
{
scanf("%d%d%d", &l, &r, &c);
printf("%d\n", Query(l, r, c));
}
}
return 0;
}
LOJ-6283-数列分块7的更多相关文章
- LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
#6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ#6283. 数列分块入门 7
对于每个区间先乘在加,如果我修改的是部分的块,我就需要把现这个块的add和mul标记全部放下去,然后再更新. #include<map> #include<set> #incl ...
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- LOJ 6277-6280 数列分块入门 1-4
数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 直接分块+tag即可 #include <bits/stdc++.h ...
- LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)
#6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给 ...
- LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)
#6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)
#6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1 题目描述 给出 ...
- LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)
#6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5 题目描述 给出 ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...
- LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给 ...
随机推荐
- Typora快捷键记录
目前使用的是Typora这款Markdown软件,记录一下快捷键用法: 1.无序列表,黑色实心圆点或白色空心圆点 首先去除缩进,使用“Ctrl”+"["键或者“Shift”+&qu ...
- Adobe Acrobat XI 中文版激活方法
Adobe Acrobat XI不仅只是出色的PDF编辑.转换软件.此次更新深度整合了Microsoft Office套件,实现了PDF与Word.Excel以及PowerPoint等文档间的无缝相互 ...
- 华为HCNA乱学Round 5:华为交换机基础
- subquery 子查询
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum ...
- linux 下文件上传的两种工具(XFTP5和Putty之pscp)方式
一.使用XFTP(,需要先在LINUX上安装启用FTP服务) 然后,在WINDOWS上启动XFPT6客户端,将下载的文件上传至LINUX 指定目录: 二.使用PUTTY软件安装目录下的PSCP命令 1 ...
- IIS7多站点ssl配置及http自动跳转到https
SSL证书配置参考如下: http转https实战教程iis7.5 window08 IIS7安装多域名SSL证书绑定443端口 关键是修改C:\Windows\System32\inetsrv\co ...
- HDU1251 统计难题(字典树|map
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部分 ...
- Ansible 常用模块详解
经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...
- Web前端开发中的小错误
Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...
- 外网访问VMware(Centos7.0,NAT模式)搭建的web服务器应用
首先参考 https://www.cnblogs.com/studyhard-cq/p/11551755.html 设置好NAT模式,能访问公网. 1.打开VMware,点击左上角编辑 ...