博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划154:bzoj3343: 教主的魔法
阅读量:6624 次
发布时间:2019-06-25

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

 

high记录原始身高

HIGH记录每块排序之后的身高

不满一块的直接对high操作,重排之后再赋值给HIGH

块内直接打标记

查询时,不满一块的直接查,一整块的在HIGH内二分块内第一个>=C-标记的点

 

#include
#include
#include
#include
using namespace std;#define N 1000001int bl[N];int high[N],HIGH[N],tmp[N];int L[1001],R[1001],tag[1001];void read(int &x){ x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }}void modify(int l,int r,int w){ if(bl[l]==bl[r]) { for(int i=l;i<=r;++i) high[i]+=w; for(int i=L[bl[l]];i<=R[bl[l]];++i) tmp[i]=high[i]; sort(tmp+L[bl[l]],tmp+R[bl[l]]+1); for(int i=L[bl[l]];i<=R[bl[l]];++i) HIGH[i]=tmp[i]; return; } for(int i=l;i<=R[bl[l]];++i) high[i]+=w; for(int i=L[bl[l]];i<=R[bl[l]];++i) tmp[i]=high[i]; sort(tmp+L[bl[l]],tmp+R[bl[l]]+1); for(int i=L[bl[l]];i<=R[bl[l]];++i) HIGH[i]=tmp[i]; for(int i=L[bl[r]];i<=r;++i) high[i]+=w; for(int i=L[bl[r]];i<=R[bl[r]];++i) tmp[i]=high[i]; sort(tmp+L[bl[r]],tmp+R[bl[r]]+1); for(int i=L[bl[r]];i<=R[bl[r]];++i) HIGH[i]=tmp[i]; for(int i=bl[l]+1;i
>1; if(HIGH[mid]>=w) ok=mid,r=mid-1; else l=mid+1; } return y-ok+1;}void ask(int l,int r,int w){ int ans=0; if(bl[l]==bl[r]) { for(int i=l;i<=r;++i) if(high[i]+tag[bl[l]]>=w) ans++; cout<
<<'\n'; return; } for(int i=l;i<=R[bl[l]];++i) if(high[i]+tag[bl[l]]>=w) ans++; for(int i=L[bl[r]];i<=r;++i) if(high[i]+tag[bl[r]]>=w) ans++; for(int i=bl[l]+1;i

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8073749.html

你可能感兴趣的文章
高效编程工具
查看>>
dazzle简介
查看>>
struts2文件下载
查看>>
MFC UI 美化
查看>>
Java实现几种简单的重试机制
查看>>
discuz表结构详细版
查看>>
Git- Fatal: cannot do a partial commit during a merge
查看>>
Rust lang Helloworld
查看>>
Zato学习笔记1 安装
查看>>
elasticsearch开发文档(一)——安装与运行
查看>>
sql删除多个字段重复数据有主键和没主键解决方法(mysql)
查看>>
焦烈焱_云与移动互联时代的企业应用架构
查看>>
GCRetractableSectionController
查看>>
Litepal中主键id的类型
查看>>
FreeBSD 10.1环境下apache2.4配置ssl实现https
查看>>
基于面向对象(抽象数据类型)风格的kwic实现
查看>>
PHP钩子是什么?
查看>>
Android应用层到Framework到HAL再到驱动层的整个流程分析
查看>>
进度条,颜色选取
查看>>
图解正向代理、反向代理、透明代理
查看>>