LibreOJ 6280 数列分块入门 4(分块区间加区间求和)
题解:分块的区间求和比起线段树来说实在是太好写了(当然,复杂度也高)但这也是没办法的事情嘛.总之50000的数据跑了75ms左右还是挺优越的.
比起单点询问来说,区间询问和也没有复杂多少,多开一个sum数组记录和,加的时候非完整块暴力重构,完整块加整块.查询时非完整块暴力加,完整块加整块
代码如下:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; long long a[],sum[],lump[],tag[];
int n,sz; void reset(int x)
{
sum[x]=;
for(int i=(x-)*sz+;i<=min(sz*x,n);i++)
{
sum[x]+=a[i];
}
} void add(long long l,long long r,long long c)
{
for(int i=l;i<=min(lump[l]*sz,r);i++)
{
a[i]+=c;
}
reset(lump[l]);
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+;i<=r;i++)
{
a[i]+=c;
}
reset(lump[r]);
}
for(int i=lump[l]+;i<=lump[r]-;i++)
{
tag[i]+=c;
}
} long long query(long long l,long long r)
{
long long ans=;
for(int i=l;i<=min(lump[l]*sz,r);i++)
{
ans+=a[i]+tag[lump[i]];
}
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+;i<=r;i++)
{
ans+=a[i]+tag[lump[i]];
}
}
for(int i=lump[l]+;i<=lump[r]-;i++)
{
ans+=sum[i]+tag[i]*sz;
}
return ans;
} int main()
{ long long opt,l,r,c;
scanf("%d",&n);
sz=sqrt(n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
lump[i]=(i-)/sz+;
}
for(int i=;i<=n;i++)
{
sum[lump[i]]+=a[i];
}
for(int i=;i<=n;i++)
{
scanf("%lld%lld%lld%lld",&opt,&l,&r,&c);
if(!opt)
{
add(l,r,c);
}
else
{
long long tmp=query(l,r);
printf("%lld\n",tmp%(c+));
}
}
}
LibreOJ 6280 数列分块入门 4(分块区间加区间求和)的更多相关文章
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...
- LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
#6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)
#6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5 题目描述 给出 ...
- LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给 ...
- LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)
#6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6 题目描述 给出 ...
- LOJ #6277. 数列分块入门 1-分块(区间加法、单点查询)
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LibreOJ 6280 . 数列分块入门 4
题目链接:https://loj.ac/problem/6280 加一个数组保存块的和. 代码: #include<iostream> #include<cstring> #i ...
- LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)
题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...
- LibreOJ 6283 数列分块入门 7(区间加区间乘区间求和)
题解:这道题要打一个乘标记一个加标记,两个标记的优先级是乘法高,所以在乘的时候要将加标记同时乘上一个c,当然,对于每个非完整块一定要记得暴力重构整个块,把加标记和乘标记都初始化. 代码如下: #inc ...
随机推荐
- 一次在局域网中ssh连接的尝试
最近到手一台二手HP笔记本.卖我本子的是以为很漂亮的服装设计师,她因为有了一台新的Mac本所以HP本就闲置了,于是就卖给了我.本子性能跟我自己的三星本差不多,除了电池不太给力,每次开机都会提示601. ...
- vs2003属性窗口空白的问题
一个困扰很久的问题一直没有解决,因为vs的属性窗口没显示不方便修改mfc程序的id和属性等等,但是可以直接在代码里修改.问题始终是问题,最近准备画时间解决之,上网差资料搜索办法,一帖说是win7的问题 ...
- lnmp centos7 memcache服务器端 和 memcache memcached扩展的安装
在项目开发的时候有用到memcache,自己在本地需要搭建一个memcache环境,用于开发和测试; wget http://www.memcached.org/files/memcached-1.5 ...
- POJ2142(扩展欧几里得)
The Balance Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5991 Accepted: 2605 Descr ...
- 【转】Jmeter 代理服务器录制脚本
因为Badboy只支持IE浏览器,现在又不得不到到fireFox上录制脚本才能完成,再次重温下Jmeter自带的Http代理服务器,当然比起badboy,它稍稍麻烦点. 1 配置很简单 工作台--& ...
- python selenium中iframe切换、window切换方法
一.selenium中iframe切换方法: 方法一:switch_to.frame frame函数中提供了三种定位方法:by index, name, or webelement. driver.s ...
- 1111 Online Map
题意:给定一个图,以及起点和终点,需要我们计算两条路径.第1条路径:距离最短路径,若不唯一,则选择用时最短的那一条:第2条路径:用时最少路径,若不唯一,选择经过结点数最少的那一条. 思路:两次Dijk ...
- python开发函数进阶:内置函数
一,内置函数 #内置的模块#拿过来直接就用的:内置的函数 #!/usr/bin/env python #_*_coding:utf-8_*_ #内置的模块 #拿过来直接就用的:内置的函数 #作用域相关 ...
- SQL Server Database Backup and Restore in C#
SQL Server Database Backup and Restore in C# Syed Noman Ali Shah, 7 Feb 201 ...
- 转摘:ashx+jquery-autocomplete文本框输入提示功能Asp.net
引入所需文件 <script type="text/javascript" src="JS/jquery-1.8.2.min.js"></sc ...