LOJ 6278 数列分块入门2
【题解】
分块。块内排序。块内二分出第一个大于等于c的数。
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 500010
#define rg register
using namespace std;
int n,m,opt,l,r,c,block,bl[N],tag[N];
struct rec{
int data,pos;
}a[N];
inline int read(){
int k=0,f=1; char c=getchar();
while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
inline bool cmp(rec x,rec y){return x.data<y.data;}
inline int find(int pos,int x){
int l=(pos-1)*block+1,r=pos*block, ll=l;
while(l<r){
int mid=(l+r+1)>>1;
if(a[mid].data<x) l=mid;
else r=mid-1;
}
if(a[l].data>=x) return 0;
return l-ll+1;
}
int main(){
n=read(); block=sqrt(n);
for(rg int i=1;i<=n;i++) a[i].data=read(),a[i].pos=i;
for(rg int i=1;i<=n;i++) bl[i]=(i-1)/block+1;
for(rg int i=1;i<=block+1;i++) sort(a+(i-1)*block+1,a+min(i*block,n)+1,cmp);
for(rg int j=1;j<=n;j++){
if((opt=read())==0){
l=read(); r=read(); c=read();
int st=bl[l]+1,ed=bl[r]-1;
for(rg int i=st;i<=ed;i++) tag[i]+=c;
if(bl[l]==bl[r]){
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++) if(a[i].pos>=l&&a[i].pos<=r) a[i].data+=c;
sort(a+x,a+y+1,cmp);
continue;
}
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos>=l) a[i].data+=c;
sort(a+x,a+y+1,cmp);
x=(bl[r]-1)*block+1,y=min(bl[r]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos<=r) a[i].data+=c;
sort(a+x,a+y+1,cmp);
}
else{
l=read(); r=read(); c=read(); c*=c;
int st=bl[l]+1,ed=bl[r]-1,ans=0;
for(rg int i=st;i<=ed;i++) ans+=find(i,c-tag[i]);
if(bl[l]==bl[r]){
for(rg int i=(bl[l]-1)*block+1;i<=bl[l]*block;i++)
if(a[i].pos>=l&&a[i].pos<=r&&a[i].data+tag[bl[l]]<c) ans++;
printf("%d\n",ans); continue;
}
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos>=l&&a[i].data+tag[bl[l]]<c) ans++;
x=(bl[r]-1)*block+1,y=min(bl[r]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos<=r&&a[i].data+tag[bl[r]]<c) ans++;
printf("%d\n",ans);
}
}
return 0;
}
LOJ 6278 数列分块入门2的更多相关文章
- LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)
#6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6 题目描述 给出 ...
- LOJ#6278. 数列分块入门 2
在一个区间上进行操作,一种操作是某个小区间都加上c,另一个查找这个区间内大于c*c的数 我们可以另外开一个数组在保存a中的每个分块内的相对值,然后每次对a加值,并把a的值赋给b,不同的是b内的各个分块 ...
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- 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 题目描述 给出 ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...
随机推荐
- HDFS04
===================HDFS副本放置策略=================== 一个文件划分成多个block,每个 block存多份,如何为每个block选 择节点存储这几份数据? ...
- 【转】Android HTML5 Video视频标签自动播放与自动全屏问题解决
为了解决 HTML5Video视频标签自动播放与全屏问题,在网上找了很多相关资料,网上也很多关于此问题解决方法,但几乎都不能解决问题,特别对各大视频网站传回来的html5网页视频自动播放与全屏问题,我 ...
- Jar包中文乱码问题
项目上遇用winrar修改替换jar中一个中文文件名后出现jar包解压读取错误问题,被这个问题纠缠了两次,都是现场比较情急的情况,于是就研究一下彻底弄清楚这个问题.中间也网上搜过一些内容,但实际测试不 ...
- Gift
[问题描述] 人生赢家老王在网上认识了一个妹纸,然后妹纸的生日到了,为了表示自己的心 意,他决定送她礼物.可是她喜爱的东西特别多,然而他的钱数有限,因此他想 知道当他花一定钱数后剩余钱数无法再购买任何 ...
- Unity项目 - 打砖块游戏
基本功能:实现WASD进行视角在XY轴方向的移动,其次按下鼠标左键产生子弹bullet对面前的砖块cube进行碰撞. 主界面: 运行情况: 动态过程: 项目地址:BreakBricks 制作过程: 创 ...
- 51nod 1222 莫比乌斯反演
思路: yhx找的反演题 题解已经烂大街了 #pragma GCC optimize("O3") //By SiriusRen #include <bits/stdc++.h ...
- HDU4340 Capturing a country DP
自己原来写的两个维度的DP有错,看了半天这个大牛的blog.http://blog.csdn.net/cyberzhg/article/details/7840922 题意:A军队和B军队要一起占领一 ...
- flask 三剑客
1.flask中的httpresponse @app.route("/") # app中的route装饰器 def index(): # 视图函数 return "Hel ...
- .Net application,Session,Cache简单比较
Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象.不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对 ...
- 【Leetcode 3】Longest Substring Without Repeating Characters0
Description: Given a string, find the length of the longest substring without repeating characters. ...