BZOJ 3343教主的魔法
Description
Input
Output
Sample Input
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
Sample Output
3
HINT
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
const int maxn=;
struct aa{int num,tag,h,block;}a[maxn];
int c[maxn];
int mid,b[maxn],n,q,tot,l,r,w;
using namespace std;
void add(int l,int r,int w){//这里写毁了
int zuo=a[l].h,you=a[r].h;
if (a[l].block*mid>=r) {for (int i=l;i<=r;i++) a[i].num+=w;
for (int i=(a[zuo].block-)*mid+;i<=a[zuo].block*mid;i++) c[i]=a[i].num;
sort(c+(a[l].block-)*mid+,c+a[l].block*mid+);return;}
for (int i=l;i<=a[l].block*mid;i++)a[i].num+=w;
for (int i=(a[zuo].block-)*mid+;i<=a[zuo].block*mid;i++) c[i]=a[i].num;
sort(c+(a[l].block-)*mid+,c+a[l].block*mid+);
for(int i=(a[r].block-)*mid+;i<=r;i++) a[i].num+=w;
for (int i=(a[you].block-)*mid+;i<=a[you].block*mid;i++) c[i]=a[i].num;
sort(c+(a[r].block-)*mid+,c+a[r].block*mid+);
for (int i=a[l].block+;i<=a[r].block-;i++)
a[(i-)*mid+].tag+=w;
} int find1(int l,int r,int c){
for (int i=l;i<=r;i++) b[i]=a[i].num; b[r+]=;
sort(b+l,b+r+);
int x=lower_bound(b+l,b+r+,c)-b;
return r-x+;
} int find2(int l,int r,int d){
int x=lower_bound(c+l,c+r+,d)-c;
return r-x+;
} int query(int l,int r,int d){
int zuo=a[l].h,you=a[r].h;
int ans=;
if (a[l].block*mid>=r) return find1(l,r,d-a[zuo].tag);
ans+=find1(l,a[l].block*mid,d-a[zuo].tag);
for (int i=a[l].block+;i<=a[r].block-;i++)
ans+=find2((i-)*mid+,i*mid,d-a[(i-)*mid+].tag);
ans+=find1((a[r].block-)*mid+,r,d-a[you].tag);
return ans;
} int main(){
freopen("magic.txt","r",stdin);
freopen("me.txt","w",stdout);
char ch[];
scanf("%d%d",&n,&q);
mid=(int)sqrt(n)+;
for (int i=;i<=n;i++) scanf("%d",&a[i].num),c[i]=a[i].num;
for (int i=;i<=n;i++)if (tot*mid>=i) a[i].block=tot,a[i].h=a[i-].h;else a[i].block=++tot,a[i].h=i;
for (int i=;i<=tot;i++)
sort(c+(i-)*mid+,c+i*mid+);
for (int j=;j<q;j++){
scanf("%s%d%d%d",&ch,&l,&r,&w);
switch(ch[]){
case 'M':add(l,r,w);break;
case 'A':printf("%d\n",query(l,r,w)); break;
}
}
}
BZOJ 3343教主的魔法的更多相关文章
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- Bzoj 3343: 教主的魔法 分块,二分
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 821 Solved: 364[Submit][Status][Discuss ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- bzoj 3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 924 Solved: 402[Submit][Status][Discuss] Descriptio ...
- bzoj 3343 教主的魔法 分块
修改直接对整块打标记,两边暴力. 查询需要保证每个整块有序,所以在修改时排序就好啦 #include<cstdio> #include<cstring> #include< ...
- [bzoj] 3343 教主的魔法 || 带修改分块
原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...
- 块状链表 bzoj 3343教主的魔法
//块状链表//分块排序,然后每次查找时在暴力查找头和尾两个块.//中间那些块,因为有序所以只需2分查找即可.我用的是lower_pound();//插入是,也是头和尾暴力插入,中间那些加到一个累计里 ...
随机推荐
- 由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储
#include <stdio.h> #include <string.h> int main() { char s[]="Copywrite 1999-2000 G ...
- Android之HTTP网络通信--GET传递(二)
根据上一篇写的是实现了通过url接口将接口中的数据显示出来,这次根据上一篇的基础,进一步说明一下AsynTask的使用. AsynTask类有几个函数是大家必须知道的. doInBackGround( ...
- Swift和OC相互调
在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , ...
- Unix网络编程(3)——C/S模型几种情况
UNP第五章描述了在客户端和服务器连接建立之后会出现的几种情况,并给出了解决方案,做一个简单的总结. 先给出这个简单的回射C/S程序的模型如下图. 1.客户端和服务器正常终止连接 客户端从标准输入 ...
- Apache配置虚拟主机后,不能访问localhost的问题
今天想试用一下php7,但是发现php7只支持Apache2.4版本,而我电脑上的Apache是2.2版本,为了想尝鲜,就必须去下载新的Apache2.4 php7和apache2.4安装整合以后,l ...
- mapping 详解4(mapping setting)
mapping type 映射设置一般发生在: 1. 增加新的 index 的时候,添加 mapping type,对 fields 的映射进行设置 PUT twitter { "mappi ...
- DROP--删除表
DROP TABLE table_name; 说明: 1.必须有表的权限 2.表不能有外键约束
- nodejs错误:ld: library not found for -lgcc_s.10.5 clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方案: $ cd /usr/local/lib $ sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib 参考链接
- HTML5吧!少年
一.为了能使IE9以下的IE浏览器也能支持html5的标签,所以首先得在文档头部用条件注释的方法引入那段著名的代码. 1 2 3 <!--[if lt IE 9]> <script ...
- 基于node/mongo的App Docker化测试环境搭建
搭建步骤: 1.宿主机环境 ubuntu 14.4宿主机环境(云主机): 安装wget与curl(sudo apt-get install wget curl)2.安装Docker (wget -q ...