题面

刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~)

本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念;

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int a[1000010],b[1000010],belong[1000010]; //原来的
int lazy[1000010],l[1000010],r[1000010]; //块上的
int block,tot,n,m;
void build()
{
block=sqrt(n);
tot=n/block;
if(n%block){
++tot;
}
for(register int i=1;i<=n;i++){
b[i]=a[i];
belong[i]=(i-1)/block+1;
}
for(register int i=1;i<=tot;i++){
l[i]=(i-1)*block+1;
r[i]=i*block;
}
r[tot]=n;
for(register int i=1;i<=tot;i++){
sort(b+l[i],b+r[i]+1);
}
return;
}
void change(int x,int y,int k)
{
if(belong[x]==belong[y]){
for(register int i=x;i<=y;i++){
a[i]+=k;
}
for(register int i=l[belong[x]];i<=r[belong[x]];i++){
b[i]=a[i];
}
sort(b+l[belong[x]],b+r[belong[x]]+1);
return ;
}
for(register int i=x;i<=r[belong[x]];i++){
a[i]+=k;
}
for(register int i=l[belong[x]];i<=r[belong[x]];i++){
b[i]=a[i];
}
sort(b+l[belong[x]],b+r[belong[x]]+1);
for(register int i=l[belong[y]];i<=y;i++){
a[i]+=k;
}
for(register int i=l[belong[y]];i<=r[belong[y]];i++){
b[i]=a[i];
}
sort(b+l[belong[y]],b+r[belong[y]]+1);
for(register int i=belong[x]+1;i<=belong[y]-1;i++){
lazy[i]+=k;
}
}
int query(int x,int y,int goal)
{
int ans=0;
if(belong[x]==belong[y]){
for(register int i=x;i<=y;i++){
if(a[i]+lazy[belong[x]]>=goal) ++ans;
}
return ans;
}
for(register int i=x;i<=r[belong[x]];i++){
if(a[i]+lazy[belong[x]]>=goal) ++ans;
}
for(register int i=l[belong[y]];i<=y;i++){
if(a[i]+lazy[belong[y]]>=goal) ++ans;
}
for(register int i=belong[x]+1;i<=belong[y]-1;i++){
int L=l[i],R=r[i],mid;
while(L<R){
int mid=(L+R)/2;
if(b[mid]+lazy[i]>=goal){
R=mid;
}
else{
L=mid+1;
}
}
if(L==r[i]){
ans+=((b[L]+lazy[i])>=goal);
continue;
}
ans+=(r[i]-L+1);
}
return ans;
}
int main()
{
cin>>n>>m;
for(register int i=1;i<=n;i++) scanf("%d",&a[i]);
build();
for(register int i=1;i<=m;i++){
char type;
int x,y,k;
cin>>type>>x>>y>>k;
if(type=='M'){
change(x,y,k);
}
else{
cout<<query(x,y,k)<<endl;
}
}
}

洛谷 P2801 教主的魔法 题解的更多相关文章

  1. 洛谷 P2801 教主的魔法 解题报告

    P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...

  2. 洛谷——P2801 教主的魔法(线段树or分块)

    P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...

  3. 洛谷P2801 教主的魔法 [分块,二分答案]

    题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...

  4. 洛谷 P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  5. BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343  ||  https://www.luogu.org/problem/show?pid=280 ...

  6. 洛谷P2801 教主的魔法 分块

    正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...

  7. [洛谷P2801]教主的魔法

    题目大意:有$n$个数,$q$个操作.两种操作: $M\;l\;r\;w:$把$[l,r]$所有数加上$w$ $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数. 题解:分块,对 ...

  8. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  9. P2801 教主的魔法(分块)

    P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...

随机推荐

  1. 3、Grid、GridSplitter 网格分离器、SharedSizeGroup 共享尺寸组

    Grid——网格布局,是WPF中最强大的布局容器,可以实现任何其他容器的布局.一个网格中只展示一个元素,若要展示多元素,可用容器 布局舍入:网格的边界有时会模糊,如三等分100宽度无法被整除.推荐设定 ...

  2. codevs2370 小机房的树 x

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond   题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号 ...

  3. 小程序开发获取token值

    // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId // console.lo ...

  4. 试用saucelabs进行浏览器兼容性测试

    Hi,all 跟大家分享下saucelabs,一个云测试平台,支持PC和手机(自带的)浏览器的兼容性测试,并且支持selenium/appium的自动化测试,不过是收费的,价格还挺贵,但是人工的测试是 ...

  5. JavaWeb_响应和请求数据包

    Google浏览器 F12中Network->Header部分 <%@ page language="java" import="java.util.*&qu ...

  6. C++入门经典-例4.7-变量的作用域

    1:代码如下: // 4.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  7. Mysql : Maximum execution time of 30 seconds exceeded

    在向Mysql数据库中插入数据时,提示Maximum execution time of 30 seconds exceeded.......翻译:最大运行时间超过30秒. 最后在php.ini中找到 ...

  8. 后盾网lavarel视频项目---5、淘宝镜像cnpm的原理及如何使用

    后盾网lavarel视频项目---5.淘宝镜像cnpm的原理及如何使用 一.总结 一句话总结: 原理:把npm上面的所有软件copy过来 使用:npm install -g cnpm --regist ...

  9. html 绘图

    <html> <head> <title>canvas绘制图形</title> <style> body{ margin: 0px; pad ...

  10. 浏览器端-W3School-HTML:HTML DOM Audio 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Audio 对象 1.返回顶部 1. HTML DOM Audio 对象 Audio 对象 Audio 对象是 HTML5 中的 ...