博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3343 教主的魔法 分块
阅读量:5327 次
发布时间:2019-06-14

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

mdzz....我的-Wall怕不是被吃了。。。快读里面==写成了=。。。。艹。。。调了一中午、、、QWQ我的时间啊。。。


分块:块内排序加tag(就是偏移量),来二分比所求大的位置;散块暴力修改。。。

#include
#include
#include
#include
#include
#define R register intusing namespace std;inline int g() { R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix; do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;}int n,m,q,T;int a[1000010],s[1000010],pos[1000010],tg[1000010];inline void build(int p) { R l=(p-1)*T+1,r=min(p*T,n); for(R i=l;i<=r;++i) s[i]=a[i]; sort(s+l,s+r+1);}inline int calc(int p,int d) { R l=(p-1)*T+1,r=min(p*T,n); R tmp=lower_bound(s+l,s+r+1,d)-s-1; return r-tmp;}inline void update(int l,int r,int d) { if(pos[l]==pos[r]) for(R i=l;i<=r;++i) a[i]+=d; else { for(R i=l;i<=pos[l]*T;++i) a[i]+=d; for(R i=(pos[r]-1)*T+1;i<=r;++i) a[i]+=d; } pos[l]==pos[r]?build(pos[l]):build(pos[l]),build(pos[r]); for(R i=pos[l]+1;i
=d) ++ret;} else { for(R i=l;i<=pos[l]*T;++i) if(a[i]+tg[pos[i]]>=d) ++ret; for(R i=(pos[r]-1)*T+1;i<=r;++i) if(a[i]+tg[pos[i]]>=d) ++ret; } for(R i=pos[l]+1;i

f我再也不能写错快读了。。。2019.04.23

 

转载于:https://www.cnblogs.com/Jackpei/p/10756117.html

你可能感兴趣的文章
winrar大全+压缩
查看>>
zoj 3599 Game 博弈论
查看>>
App接口如何保证安全
查看>>
asp.net状态服务文章阅读
查看>>
Response.End方法
查看>>
NYOJ 49 开心的小明(01背包)
查看>>
C# FTP 命令无法获取ServerU目录列表问题
查看>>
POJ-1191 棋盘分割 记忆化搜索
查看>>
原生ajax封装
查看>>
Entity Framework 5.0基础系列
查看>>
编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]
查看>>
MongoDB Windows环境安装及配置
查看>>
第三次作业-陈志艺
查看>>
<q> 与 <blockquote> 的区别
查看>>
SQL注射技术总结文档
查看>>
第四次作业总结
查看>>
centos6 挂载ntfs格式移动硬盘
查看>>
在Sqlite中通过Replace来实现插入和更新
查看>>
手机端 H5上传头像
查看>>
配置generatorConfig.xml自动生成的代码的sql书写问题
查看>>