博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LibreOJ 6278】 数列分块入门 2 (分块)
阅读量:4587 次
发布时间:2019-06-09

本文共 990 字,大约阅读时间需要 3 分钟。

给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数。

code:

#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;int rd() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){ x=x*10+ch-'0';ch=getchar();} return x*f;}const int MAX=50010;int n,blo;int v[MAX],tag[MAX],bl[MAX];vector
vec[505];void reset(int x) { vec[x].clear(); for(int i=(x-1)*blo+1;i<=min(x*blo,n);i++) vec[x].push_back(v[i]); sort(vec[x].begin(),vec[x].end());}void add(int a,int b,int c) { for(int i=a;i<=min(bl[a]*blo,b);i++) v[i]+=c; reset(bl[a]); if(bl[a]!=bl[b]) { for(int i=(bl[b]-1)*blo+1;i<=b;i++) v[i]+=c; reset(bl[b]); } for(int i=bl[a]+1;i<=bl[b]-1;i++) tag[i]+=c;}int query(int l,int r,int c) { int ans=0; for(int i=l;i<=min(bl[l]*blo,r);i++) if(v[i]+tag[bl[l]]

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9247991.html

你可能感兴趣的文章
[USACO4.2] 草地排水 Drainage Ditches (最大流)
查看>>
dotnetcore+vue+elementUI 前后端分离 三(前端篇)
查看>>
gdb输入输出重定向
查看>>
包含.h就可以用其对应的函数
查看>>
【转】block一点也不神秘————如何利用block进行回调
查看>>
mysql忘记root密码的处理方法
查看>>
Newtonsoft.Json之JArray, JObject, JProperty,JValue
查看>>
OO Summary (Homework 9-11)
查看>>
fedora 解决yumBackend.py进程CPU占用过高
查看>>
NTP 协议介绍
查看>>
软件测试 · 白盒测试
查看>>
docker-compose exec时出现"fork/exec /proc/self/exe: no such file or directory" 报错
查看>>
IIS的安装及网站发布的图解
查看>>
VM虚拟机安装苹果雪豹操作系统
查看>>
dos进去mysql导入数据库
查看>>
Oracle单表去重复(一)
查看>>
C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?...
查看>>
JSON字符串互相转换的三种方式和性能比较
查看>>
C++中cout输出字符型指针地址值的方法
查看>>
Java运算符法则
查看>>