块状链表 bzoj 3343教主的魔法
//块状链表
//分块排序,然后每次查找时在暴力查找头和尾两个块。
//中间那些块,因为有序所以只需2分查找即可。我用的是lower_pound();
//插入是,也是头和尾暴力插入,中间那些加到一个累计里即可。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int a[1000005],b[1000005],lei[1000005],dian[1000005],l[1000005],r[1000005];
int n,m,len,len1;
char ch[2];
void jian(int a1)
{
l[a1]=(a1-1)*len1+1;
r[a1]=min(a1*len1,n);
for(int i=l[a1];i<=r[a1];i++)
b[i]=a[i];
sort(b+l[a1],b+r[a1]+1);
}
void jia(int a1,int a2,int a3)
{
if(dian[a1]==dian[a2])
{
for(int i=a1;i<=a2;i++)
a[i]+=a3;
jian(dian[a1]);
return;
}
for(int i=a1;i<=r[dian[a1]];i++)
a[i]+=a3;
for(int i=l[dian[a2]];i<=a2;i++)
a[i]+=a3;
for(int i=dian[a1]+1;i<dian[a2];i++)
lei[i]+=a3;
jian(dian[a1]);
jian(dian[a2]);
return;
}
int zhao(int a1,int a2,int a3)
{
int sum=0,s;
if(dian[a1]==dian[a2])
{
for(int i=a1;i<=a2;i++)
if(a[i]+lei[dian[a1]]>=a3)
sum++;
return sum;
}
for(int i=a1;i<=r[dian[a1]];i++)
if(a[i]+lei[dian[a1]]>=a3)
sum++;
for(int i=l[dian[a2]];i<=a2;i++)
if(a[i]+lei[dian[a2]]>=a3)
sum++;
for(int i=dian[a1]+1;i<dian[a2];i++)
{
s=lower_bound(b+l[i],b+r[i]+1,a3-lei[i])-b;
sum+=r[i]+1-s;
}
return sum;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
len1=floor(sqrt(n));
len=n/len1;
if(n%len1)
len++;
for(int i=1;i<=len;i++)
jian(i);
for(int i=1;i<=n;i++)
dian[i]=(i-1)/len1+1;
for(int i=0;i<m;i++)
{
int a1,a2,a3;
scanf("%s%d%d%d",ch,&a1,&a2,&a3);
if(ch[0]=='A')
printf("%d\n",zhao(a1,a2,a3));
else
jia(a1,a2,a3);
}
return 0;
}
块状链表 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教主的魔法
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- 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 ...
随机推荐
- Scratch(一)为什么你要学Scratch儿童编程
因为人工智能和机器人学科的崛起,似乎一夜之间未来就变成了程序员的天下,尤其是在知乎上,不会编程都没办法和这群程序员好好说话了.我已经搬了一辈子砖了,难道我的孩子也还要接着搬?这就是现在大部分家长的焦虑 ...
- JAVA基础_修饰符
引言:Java的修饰符根据修饰的对象不同,分为类修饰符.方法修饰符.变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符.访问控制存在的原因:a.让客户端程序员无法触及他们不应该触及的部分 ...
- CentOS 7忘记了root密码解决方案
1.启动系统,在选择进入系统的界面按“e”进入编辑页面 2.按向下键,找到以“Linux16”开头的行,在该行的最后面输入“init=/bin/sh” 3.按“ctrl+X”组合键进入单用户模式 4 ...
- gulp删除目标文件中所有的console.log()语句——gulp-strip-debug
1.安装npm包 npm install --save-dev gulp-strip-debug 2.使用 const gulp = require('gulp'); const stripDebug ...
- 基于MFC的网页ActiveX控件开发全程实录2(js向ActiveX控件传递参数)
原文转自 https://blog.csdn.net/qianbin3200896/article/details/81452822 1.ActiveX控件部分(JS到ActiveX控件)继续上一篇博 ...
- Identityserver4证书
dotnet应用用IdentityServer4做了登陆的功能,本地运行没有问题,部署到服务器上面就出现上面的问题,打开服务器的日志记录开关,获取到下面的异常信息.原来是 通过分析日志信息 ...
- JS权威指南读书笔记(一)
第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格. 第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...
- 将网址url中的参数转化为JSON格式的两种方法
在我们进入主题前,我先先看下获取网址URL的方法: window.location.href // 设置或获取整个URL为字符串 window.location.hash // 设置或获取href属性 ...
- arm的基本介绍
2440是arm9核,是基于v4 架构 6410是arm11核 基于v6架构 210是a8的核 基于v7架构 前面的是经典阵营,比较老.Arm11之后改为contex系列. Arm7的水准和M3相 ...
- Java上传图片到服务器
HTML页面的标签 <div id="div_selectpic" align="right" style="width: 300px;font ...