教主的魔法

传送门

这道题序列很长,但是操作数很少,然后也没想到什么好的数据结构来维护,那就分块吧。

感觉维护的过程很好想,修改的时候对于整个块都在内的直接打标记,两个零散的区间暴力重构,重新排序。查询的时候,对于整块的,直接在块内lowerbound一下z-add[i]的位置,零散的话直接暴力计算即可。

复杂度O(ksqrt(n)logsqrt(n)).注意数组别开小了……

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<set>
#include<queue>
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')using namespace std;
typedef long long ll;
const int M = 2000005;
const int N = 2005;
const ll INF = 1e17+9;
const ll mod = 19260817;ll read()
{ll ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){ans *= 10;ans += ch - '0';ans %= mod;ch = getchar();}return ans * op;
}ll a[M],b[N][N],l[N],r[N],blo[M],add[N],n,m,B,cnt,g = 1,x,y,z;
char s[5];ll query(ll x,ll y,ll z)
{ll L = blo[x],R = blo[y],ans = 0;if(L == R){rep(i,x,y) if(a[i] + add[L] >= z) ans++;return ans;}rep(i,L+1,R-1){//rep(j,1,B) printf("%lld ",b[i][j]);enter;//printf("!%lld\n",z - add[i]);int d = lower_bound(b[i]+1,b[i]+B,z - add[i]) - b[i];//printf("#%d\n",d);if(d == B && b[i][d] < z - add[i]) continue;ans += B - d + 1;}rep(i,x,r[L]) if(a[i] + add[blo[i]] >= z) ans++;rep(i,l[R],y) if(a[i] + add[blo[i]] >= z) ans++;return ans;
}void modify(ll x,ll y,ll z)
{ll L = blo[x],R = blo[y],cur = 0;if(L == R){rep(i,x,y) a[i] += z;rep(i,l[L],r[L]) b[L][++cur] = a[i];sort(b[L]+1,b[L]+1+B);return;}rep(i,L+1,R-1) add[i] += z;rep(i,x,r[L]) a[i] += z;rep(i,l[R],y) a[i] += z;rep(i,l[L],r[L]) b[L][++cur] = a[i];sort(b[L]+1,b[L]+B+1),cur = 0;rep(i,l[R],r[R]) b[R][++cur] = a[i];sort(b[R]+1,b[R]+B+1);
}int main()
{n = read(),m = read(),B = sqrt(n);cnt = (n % B) ? n / B + 1 : n / B;rep(i,1,cnt) l[i] = r[i-1] + 1,r[i] = l[i] + B - 1;r[cnt] = n;rep(i,1,n) a[i] = read();rep(i,1,n){blo[i] = g;if(i == r[g]) g++;}rep(i,1,cnt){int cur = 0;rep(j,l[i],r[i]) b[i][++cur] = a[j];sort(b[i]+1,b[i]+B+1);}rep(i,1,m){scanf("%s",s);x = read(),y = read(),z = read();if(s[0] == 'A') printf("%lld\n",query(x,y,z));else modify(x,y,z);}return 0;
}

 

转载于:https://www.cnblogs.com/captain1/p/9834471.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

obs自定义编码设置_通过7个步骤设置OBS进行实时编码

obs自定义编码设置by Wesley McCann韦斯利麦肯(Wesley McCann) 通过7个步骤设置OBS进行实时编码 (Setting up OBS for Live Coding in 7 Steps) Twitch TV is a popular live-streaming service. You traditionally used Twitch to stream yourself playing video games, but …

java hadoop api_Hadoop 系列HDFS的Java API( Java API介绍)

HDFS的Java APIJava API介绍将详细介绍HDFS Java API&#xff0c;一下节再演示更多应用。Java API 官网如上图所示&#xff0c;Java API页面分为了三部分&#xff0c;左上角是包(Packages)窗口&#xff0c;左下角是所有类(All Classes是)窗口&#xff0c;右侧是详情窗口。这里推…

最大连通子数组

这次是求联通子数组的求和&#xff0c;我们想用图的某些算法&#xff0c;比如迪杰斯特拉等&#xff0c;但是遇到了困难。用BFS搜索能达到要求&#xff0c;但是还未能成功。 那么我们这样想&#xff0c;先将每行的最大子数组之和&#xff0c;然后再将这些最大之和组成一个数组&a…

redis的zset的底层实现_Redis(三)--- Redis的五大数据类型的底层实现

1、简介Redis的五大数据类型也称五大数据对象&#xff1b;前面介绍过6大数据结构&#xff0c;Redis并没有直接使用这些结构来实现键值对数据库&#xff0c;而是使用这些结构构建了一个对象系统redisObject&#xff1b;这个对象系统包含了五大数据对象&#xff0c;字符串对象(st…

科学计算机简单编程_是“计算机科学”还是“编程”?

科学计算机简单编程by Sam Corcos由Sam Corcos 是“计算机科学”还是“编程”&#xff1f; (Is It “Computer Science” or “Programming”?) 教育政策白皮书(提示&#xff1a;它们不是同一个东西) (An education policy white paper (hint: they’re not the same thing))…

[Matlab] 画图命令

matlab画图命令&#xff0c;不定时更新以便查找 set(gcf, color, [1 1 1]);     % 使图背景为白色 alpha(0.4);           %设置平面透明度 plot(Circle1,Circle2,k--,linewidth,1.25);  % k--设置线型  ‘linewidth’,1.25  设置线宽度为1.25 %线型   …

django入门记录 2

1. 创建一个app&#xff0c; python manage.py startapp appname 2. 设计model&#xff0c;在appname/目录下编辑好model 3. 检测model的修改&#xff0c;python manage.py makemigrations appname 4. 自动执行数据库迁移&#xff0c;并同步管理数据库结构&#xff0c; python…

spark sql 数据类型转换_SparkSql 数据类型转换

1、SparkSql数据类型 1.1数字类型 ByteType:代表一个字节的整数。范围是-128到127 ShortType:代表两个字节的整数。范围是-32768到32767 IntegerType:代表4个字节的整数。范围是-2147483648到2147483647 LongType:代表8个字节的整数。范围是-9223372036854775808到92233720…

【Python】 list dict str

list & dict & str 这三种类型是python中最常用的几种数据类型。他们都是序列的一种 ■  序列通用操作 1. 分片 s[a:b] 返回序列s中从s[a]到s[b-1]的片段。注意s[0:0]是空集而不是s[0] s[a:b:c]  加入第三个参数以设置取样步长。可以设置成负数来从右向左取样 2. 加…

终端terminal的颜色配置

PS1 color 终端terminal的颜色配置 PS1"\[\e[92;1m\][\u\e[90;5m\e[25m\[\e[91;4m\]Atlas\e[24m\[\e[1m\]\[\e[92;1m\] \W ]\\$\[\e[0m\]" Set CodeDescriptionExamplePreview1Bold/Bright echo -e "Normal \e[1mBold" 2Dim echo -e "Normal \e[2mDi…

速度与激情的Webpack

Also published in my tech blog也发布在我的技术博客中 This is a guide that is meant to help you ease your development workflow and save your time by using a bunch of awesome tools that you’ve read about on the internet (does React Hot Loader ring any bells…

java nio socket长连接_nio实现Socket长连接和心跳

前段时间用bio方式&#xff0c;也就是传统io实现了socket的长连接和心跳&#xff0c;总觉着服务端开启多线程管理socket连接的方式过于消耗资源&#xff0c;数据并发的情况下可能会影响到性能&#xff0c;因此就尝试使用nio改进原来的代码。然而改进的过程却不像我起初设想的那…

unity让对象作为参数_C#+Unity学习笔记:类与对象

参考文献蜜酒厅通讯社 游戏部 石中居士对象(object)&#xff1a;有状态、行为和身份的东西。状态(state)&#xff1a;表示物体特征的信息&#xff0c;可以用来跟踪对象的状态。属性(properties)&#xff1a;因为编程人员需要把控对象的状态&#xff0c;所以要对其进行访问。通过…

Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986

问题 24-Mar-2017 23:43:21.300 INFO [http-apr-8001-exec-77] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalAr…

Linux Kernel Oops异常分析

0&#xff0e;linux内核异常常用分析方法 异常地址是否在0附近&#xff0c;确认是否是空指针解引用问题异常地址是否在iomem映射区&#xff0c;确认是否是设备访问总线异常问题&#xff0c;如PCI异常导致的地址访问异常异常地址是否在stack附近&#xff0c;如果相邻&#xff0c…

Centos7.5 VMtools的安装与卸载

一、安装1、自带tools&#xff1a; 选择VMware工具栏 > 虚拟机 > 安装VMtools2、挂载光驱3、tar -zxvf VMwareTools-10.3.2-9925305.tar.gz&#xff08;这里以tar文件为例&#xff09;4、切换到目标目录&#xff0c;执行&#xff08;一定要使用root权限执行&#xff09;…

gitter 卸载_最佳Gitter渠道:开发人员工具

gitter 卸载by Gitter通过吉特 最佳Gitter渠道&#xff1a;开发人员工具 (Best Gitter channels: Developer Tools) Developer tools have become essential to any kind of serious software development, also in the open source setting. They can ease the daily develop…

java 过滤脚本_我写的得到天气的Java代码,其中有过滤脚本和过滤HTMLtag的函数。...

public class WeatherFilter{private String html;private String target"http://weather.news.sohu.com/query.php?city北京";public WeatherFilter()throws Exception{this(null);}public WeatherFilter(String targetIn)throws Exception{if(targetIn!null)this.…

【懒癌发作】收集各种懒癌发作时用程序写作业的程序

updata:20170621 好的&#xff0c;已经是准高一了&#xff0c;现在看起来太蠢了。。。 -------------------------------------------------------------------------------------- 要真正的运用&#xff0c;程序一定是要来解决实际问题的——比如作业&#xff08;懒就直说&…

50欧姆线设计 高频pcb_硬件设计基础100问(三)

硬件基础知识问答今天依旧是节前知识储备哦&#xff0c;jacky大神整理的硬件基础知识很细致&#xff0c;第三弹学起来&#xff01;01 1、晶体管基本放大电路有共射、共集、共基三种接法&#xff0c;请简述这三种基本放大电路的特点。共射&#xff1a;共射放大电路具有放大电流和…