LOJ-数列分块入门5
链接:
题意:
给出一个长为 的数列 ,以及 n个操作,操作涉及区间开方,区间求和。
思路:
考虑开方5次之后就为1, 即考虑一整个区间的开方次数,对小于5次的区间暴力开方,否则就不管他.
代码:
#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 = 1e5+10;
LL a[MAXN], Tag[MAXN], Sum[MAXN];
LL Belong[MAXN];
int n, part;
void Update(LL l, LL r, LL c)
{
if (Tag[Belong[l]] < 5)
for (int i = l;i <= min(Belong[l]*part, r);i++)
{
Sum[Belong[i]] -= a[i];
a[i] = sqrt(a[i]);
Sum[Belong[i]] += a[i];
}
if (Belong[l] != Belong[r])
{
if (Tag[Belong[r]] < 5)
for (int i = max((Belong[r]-1)*part+1, l);i <= r;i++)
{
Sum[Belong[i]] -= a[i];
a[i] = sqrt(a[i]);
Sum[Belong[i]] += a[i];
}
}
for (int i = Belong[l]+1;i <= Belong[r]-1;i++)
{
if (Tag[i] < 5)
{
Tag[i]++;
for (int j = (i-1)*part+1;j <= i*part;j++)
{
Sum[i] -= a[j];
a[j] = sqrt(a[j]);
Sum[i] += a[j];
}
}
}
}
LL Query(LL l, LL r, LL c)
{
LL res = 0;
for (int i = l;i <= min(Belong[l]*part, r);i++)
res += a[i];
if (Belong[l] != Belong[r])
{
for (int i = max((Belong[r]-1)*part+1, l);i <= r;i++)
res += a[i];
}
for (int i = Belong[l]+1;i <= Belong[r]-1;i++)
res += Sum[i];
return res;
}
int main()
{
scanf("%d", &n);
part = sqrt(n);
for (int i = 1;i <= n;i++)
{
scanf("%lld", &a[i]);
Belong[i] = (i-1)/part + 1;
Sum[Belong[i]] += a[i];
}
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);
Update(l, r, c);
}
else
{
scanf("%d%d%d", &l, &r, &c);
printf("%lld\n", Query(l, r, c));
}
}
return 0;
}
LOJ-数列分块入门5的更多相关文章
- [Loj] 数列分块入门 1 - 9
数列分块入门 1 https://loj.ac/problem/6277 区间加 + 单点查询 #include <iostream> #include <cstdio> #i ...
- loj 数列分块入门 6 9(区间众数)
6 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及单点插入,单点询问,数据随机生成. 题解 参考:http://hzwer.com/8053.html 每个块内用一个\(vecto ...
- loj 数列分块入门 5 7 8
5 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间开方,区间求和. 思路 用\(tag\)记录这一块是否已全为\(1\). 除分块外,还可用 树状数组+并查集(链表) 或者 线 ...
- LOJ 数列分块入门系列
目录 1.区间加+单点查 每个块维护tag,散的暴力改. code: #include<bits/stdc++.h> using namespace std; const int maxn ...
- LOJ 6277:数列分块入门 1(分块入门)
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计讨论 3 测试数据 题目描述 给出一 ...
- 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 #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
#6283. 数列分块入门 7 内存限制: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 题目描述 给出 ...
随机推荐
- Nginx正向代理、反向代理、负载均衡及性能优化
一.Nginx是什么 Nginx是一款高性能的 HTTP 和反向代理服务器,由俄罗斯人Igor Sysoev(伊戈尔·赛索耶夫)为俄罗斯网站Rambler.ru开发的,在Rambler.ru网站平稳的 ...
- 非GUI运行Jmeter,jtl文件没有响应数据的解决办法
一.问题 Jmeter官方一直强调要在非GUI模式下运行Jmeter:Run your JMeter test in command-line non-GUI mode. 但在非GUI模式下运行生成的 ...
- 微信小程序UI学习
1.大纲: 2.flex的布局: 3.相对定位和绝对定位: position: relative 相对定位 position: absolute 绝对定位
- Kotlin 的 @JvmStatic 和 @JvmField 注解
这是关于 Java 静态方法和静态变量的一段代码: public class TestStatic { private int otherField = 0; public static final ...
- cocos2dx基础篇(2) 第一个程序
[本节内容] 1.程序的基本组成:CCSprite(精灵).CCLayer(层).CCScene(场景).CCDirector(导演) 2.分析HelloWorld源码. 一.基本组成 cocos2d ...
- TortoiseGit 中文汉化
TortoiseGit程序以及中文汉化包:https://tortoisegit.org/download/ TortoiseGit程序: 汉化包:
- codeblocks无法识别的16位程序解决方法
被codeblocks心态搞崩了,分享一下经验给大家,具体就是无法运行编译好的程序,还有就是调试功能没法用. 查了很多资料,自己搞了一个终极解决方法:1卸载codeblocks,2打开我的电脑,全盘搜 ...
- 【VS开发】使用MFC创建并调用ActiveX控件
使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...
- HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletRespo ...
- CRF++的使用(待更新)
1.下载CRF++(Windows和Linux两个版本) 2.目录如下: 主要用到crf_learn.exe ,crf_test.exe和libcrfpp.dll三个文件 doc文件夹:官方主页 ex ...