传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

真 调一晚上血压上来了。
考虑第一个操作,块内打个标记,其他的暴力查询即可。
考虑第二个操作,讲块内元素排序之后,直接二分查询。
注意修改元素值的时候需要重新排序,并且在查询开始前需要先将块排序。。以及各种小细节。

// Problem: #6278. 数列分块入门 2
// Contest: LibreOJ
// URL: https://loj.ac/p/6278
// Memory Limit: 256 MB
// Time Limit: 500 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
LL a[N],b[N];
LL tag[N],id[N];
int block;void add(int l,int r,int c) {if(id[l]==id[r]) {for(int i=l;i<=r;i++) a[i]+=c;int sl=(id[l]-1)*block,sr=id[l]*block; sr=min(sr,n);for(int i=sl+1;i<=sr;i++) b[i]=a[i];sort(b+sl+1,b+sr+1);} else {int sl=id[l]*block,sr=(id[r]-1)*block;for(int i=l;i<=sl;i++) a[i]+=c;for(int i=sr+1;i<=r;i++) a[i]+=c;for(int i=sl-block+1;i<=sl;i++) b[i]=a[i];for(int i=sr+1;i<=sr+block;i++) b[i]=a[i];sort(b+sl-block+1,b+sl+1); sort(b+sr+1,b+min(sr+block,n)+1);for(int i=id[l]+1;i<=id[r]-1;i++) tag[i]+=c;}
}int query(int l,int r,LL c) {int ans=0;if(id[l]==id[r]) {for(int i=l;i<=r;i++) ans+=(a[i]+tag[id[l]])<c;} else {// for(int i=l;i<=r;i++) ans+=(a[i]+tag[id[l]])<=c;int sl=id[l]*block,sr=(id[r]-1)*block;for(int i=l;i<=sl;i++) ans+=(a[i]+tag[id[l]])<c;for(int i=sr+1;i<=r;i++) ans+=(a[i]+tag[id[r]])<c;for(int i=id[l]+1;i<=id[r]-1;i++) {int sl=(i-1)*block,sr=i*block;ans+=lower_bound(b+sl+1,b+sr+1,c-tag[i])-b-sl-1;}}return ans;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0); scanf("%d",&n); block=sqrt(n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]),b[i]=a[i],id[i]=(i-1)/block+1;for(int i=1;i<=id[n];i++) {int sl=(i-1)*block,sr=i*block;sort(b+sl+1,b+sr+1);}for(int i=1;i<=n;i++) {int op,l,r,c; scanf("%d%d%d%d",&op,&l,&r,&c);if(op==0) add(l,r,c);else printf("%d\n",query(l,r,1ll*c*c));}return 0;
}
/**/

#6278. 数列分块 2 分块 + 块内二分相关推荐

  1. 线性结构 —— 分块算法 —— 分块九讲

    模型1:区间加法,单点询问 问题:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 对每个块设置一个加法标记,记录这个块中元素一共加了多少,每次操作对整块直接 O(1) 标记, ...

  2. #6284. 数列分块 8 分块

    传送门 文章目录 题意: 思路: 题意: 思路: 乍一看貌似没有什么东西能维护块内同一个数的个数,但是通过第六感可以发现每次操作后区间都会被推成一个数,那么我们分个块,让后块内打个标记,是否就能过了呢 ...

  3. CSS的元素显示模式(块内元素和行内元素)

    CSS的元素显示模式:块内元素和行内元素. 块内元素:<h1>-<h6>,<p>,<div>,<ul>,<ol>,<li& ...

  4. R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break)

    R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break) 目录

  5. 匿名块 块内实体的修改

    匿名块好像不支持块内实体的修改, 块内实体的位置移动等是不可以的,好多东西不能设置,  这个需要再研究研究 转载于:https://www.cnblogs.com/houlinbo/archive/2 ...

  6. 区号组号组内块号块内地址号的计算

    容量为64块的Cache采用组相联方式映像,字块大小为128个字,每4块为一组.若主存容量为4096块,且以字编址,那么主存地址应为_(?)_位,主存区号应为_(?)_位. 主存地址=区号+组号+组内 ...

  7. Verilog的always块内的常见问题:边沿电平、同步异步、阻塞非阻塞

    0引言 verilog的always块内的边沿电平.同步异步.阻塞非阻塞问题,往往令初学者头大,下面我记录一下上述三种条件不同情况下的verilog代码描述.综合结果和资源占用情况,以供参考. 平台1 ...

  8. lisp将图元追加选择_晓东CAD家园-论坛-A/VLISP-向块添加新图元,添加图元到块内 - Powered by Discuz!...

    (defun $add-ents>block$ (ents block / copy-zt dxf mat mxm mxv objs ref->def trp B-O) ;块外图元复制到块 ...

  9. (混沌序列统计特性)块内频率测试---matlab

    说明: 块内频率测试,考察任意序列的任意长子序列中比特1的频率是否接近1/2. clc;clear; h=0.002;t=800;n=1000000;a=10;b=8/3;c=28;r=-1;x0=1 ...

最新文章

  1. java将一个数字转换为数组_Java 数组
  2. Lighttpd 配置与性能优化
  3. 方向梯度直方图(Histogram Of Gradient)详解
  4. Unity性能优化 – 脚本篇
  5. Putty(菩提)远程连接服务器教程
  6. 最新《大规模机器学习》2020综述论文
  7. 毕设日志——Faster RCNN
  8. VSCode拓展插件推荐(HTML、Node、Vue、React开发均适用)
  9. NEWS - InstallShield 2013发布
  10. 百度竞价排名曝光_企业入驻百度爱采购必须选好本地运营服务商
  11. STM32——库函数版——数码管流动显示程序
  12. python Django项目汇总(毕设、课设、学习)
  13. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法
  14. 《非暴力沟通》阅读总结
  15. cisco服务器桌面命令行窗口,WLC调试和显示命令
  16. 【WeNews】三胞债务重组方案出炉 650亿元金融债务如何化解
  17. 低功耗MCU的选择方法
  18. php date t_细说PHP的日期时间函数date()
  19. firefox vlc插件_html 嵌入vlc插件
  20. 2020年滴春天,我认识了“飞桨PaddlePaddle”

热门文章

  1. 二项式定理的几何视觉演示再次来袭,这次你看懂了吗?
  2. 吃屎是一种什么样的体验?
  3. 酒桌上,领导将酒泼到你脸上......
  4. 电梯里为什么放镜子?90%的人都不知道
  5. 入门机器学习,就这么简单!
  6. 3秒取暖,超高颜值!冬日必备的大宇取暖器
  7. position定位 响应式_使用 Vue3 实现双盒子定位 Overlay
  8. redis在linux搭建集群,Linux/Centos 7 redis4 集群搭建
  9. linux备份文件到ftp上,Linux服务器下用FTP上传下载备份文件
  10. Linux网络模块全局变量,()不是Linux系统的特色.