博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj3343】 教主的魔法(分块入门)
阅读量:7171 次
发布时间:2019-06-29

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

题意:一个含n个数的区间(n<=1000000),k次操作,两种操作:

          M a,b,c  将区间[a,b]中的每一个数加c;

          A a,b,c  查询区间[a,b]中大于c的数的个数;

思路:将区间分为sqrt(n)块,对每块进行排序;

          对于查询区间,两端的块外区间暴力处理,中间的块内区间特殊处理(二分);

         借助add标记,实现优化;

#include
#include
#include
#include
using namespace std;int add[5000100],num[5000100];int pos[5000100],b[5000100];int t,n,m,block,temp;char str[5050];void reset(int x) //区间排序{ int l=(x-1)*block+1; int r=min(x*block,n); for(int i=l;i<=r;i++) { b[i]=num[i]; } sort(b+l,b+r+1);}int find(int x,int v) //块内二分查询{ int l=(x-1)*block+1; int r=min(x*block,n); int last=r; while(l<=r) { int mid=(l+r)/2; if(b[mid]
=v) sum++; } else { for(int i=x;i<=pos[x]*block;i++) if(num[i]+add[pos[i]]>=v) sum++; for(int i=(pos[y]-1)*block+1;i<=y;i++) if(num[i]+add[pos[i]]>=v) sum++; } for(int i=pos[x]+1;i

 

转载于:https://www.cnblogs.com/dashuzhilin/p/4657091.html

你可能感兴趣的文章
jQuery中的文档处理
查看>>
JProfiler 8(一个很好的java性能监控工具) 下载和注册码
查看>>
微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)...
查看>>
SQL SERVER数据库日常使用总结
查看>>
搭建Nginx服务
查看>>
细解字符串长度
查看>>
html lable filedset
查看>>
Python 函数式编程
查看>>
Good moring!
查看>>
关于“问吧”调查问卷的心得体会
查看>>
UVA-307 Sticks
查看>>
Bad days
查看>>
PHP基础笔记
查看>>
Android 音视频深入 十八 FFmpeg播放视频,有声音(附源码下载)
查看>>
扩展KMP模板
查看>>
php 分页原理+分页代码+分页类制作
查看>>
CSS选择器要点笔记
查看>>
python测试框架nose
查看>>
2017 济南综合班 Day 4
查看>>
[USACO Mar08] 牛跑步
查看>>