构造一个序列B[i]=-b[i],建一颗线段树,维护区间max,

每次区间加后再询问该区间最大值,如果为0就在树状数组中对应的值+1(该操作可能进行多次)

答案在树状数组中找

其实只用一颗线段树也是可以的

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define mst(a) memset(a,0,sizeof(a))
#define N 100010
using namespace std; int n,m,b[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} namespace BT{
int T[N];
#define lowbit(x) ((x)&(-x))
void add(int x,int v){for(;x<=n;x+=lowbit(x))T[x]+=v;}
int Q(int x){int r=0;for(;x;x-=lowbit(x))r+=T[x];return r;}
void ntt(){mst(T);}
} namespace Seg{
#define MID int mid=(l+r)>>1,ls=id<<1,rs=id<<1|1
int tag[N*4];
struct info{
int x,id;
info(){x=id=0;}
info(int a,int b):x(a),id(b){}
friend info operator+(info a,info b){
return a.x>b.x?a:b;
}
}T[N*4];
void build(int l,int r,int id){
if(l==r){T[id]=info(-b[l],l);return;}
MID;
build(l,mid,ls),build(mid+1,r,rs);
T[id]=T[ls]+T[rs];
}
void pushdown(int l,int r,int id){
int &tmp=tag[id];
if(!tmp)return;
MID;
tag[ls]+=tmp,tag[rs]+=tmp;
T[ls].x+=tmp,T[rs].x+=tmp;
tmp=0;
}
void upd(int l,int r,int id,int L,int R,int v){
if(L<=l&&r<=R){tag[id]+=v;T[id].x+=v;return;}
pushdown(l,r,id);
MID;
if(L<=mid)upd(l,mid,ls,L,R,v);
if(R>=mid+1)upd(mid+1,r,rs,L,R,v);
T[id]=T[ls]+T[rs];
}
info Q(int l,int r,int id,int L,int R){
if(L<=l&&r<=R){return T[id];}
pushdown(l,r,id);
MID;
info res(-1e9,0);
if(L<=mid)res=res+Q(l,mid,ls,L,R);
if(R>=mid+1)res=res+Q(mid+1,r,rs,L,R);
return res;
}
void fft(){mst(tag),mst(T);}
}
void fwt(){Seg::fft(),BT::ntt();}
int main(){
for(;~scanf("%d%d",&n,&m);){
fwt();
for(int i=1;i<=n;++i)b[i]=read();
Seg::build(1,n,1);
for(int i=1;i<=m;++i){
char s[10];scanf("%s",s);
int l=read(),r=read();
if(s[0]=='a'){
Seg::upd(1,n,1,l,r,1);
for(;;){
Seg::info tmp=Seg::Q(1,n,1,l,r);
if(tmp.x==0){
Seg::upd(1,n,1,tmp.id,tmp.id,-b[tmp.id]);
BT::add(tmp.id,1);
}else break;
} }else printf("%d\n",BT::Q(r)-BT::Q(l-1));
}
}
return 0;
}

[HDU6315]Naive Operations(线段树+树状数组)的更多相关文章

  1. HDU6315 Naive Operations(线段树 复杂度分析)

    题意 题目链接 Sol 这题关键是注意到题目中的\(b\)是个排列 那么最终的答案最多是\(nlogn\)(调和级数) 设\(d_i\)表示\(i\)号节点还需要加\(d_i\)次才能产生\(1\)的 ...

  2. HDU6315 Naive Operations 线段树

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面. Solution ...

  3. HDU-6315 Naive Operations//2018 Multi-University Training Contest 2___1007 (线段树,区间除法)

    原题地址 Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/ ...

  4. HDU6315 Naive Operations(多校第二场1007)(线段树)

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  5. hdu Naive Operations 线段树

    题目大意 题目链接Naive Operations 题目大意: 区间加1(在a数组中) 区间求ai/bi的和 ai初值全部为0,bi给出,且为n的排列,多组数据(<=5),n,q<=1e5 ...

  6. 杭电多校第二场 hdu 6315 Naive Operations 线段树变形

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  7. HDU - 6315(2018 Multi-University Training Contest 2) Naive Operations (线段树区间操作)

    http://acm.hdu.edu.cn/showproblem.php?pid=6315 题意 a数组初始全为0,b数组为1-n的一个排列.q次操作,一种操作add给a[l...r]加1,另一种操 ...

  8. HDU 6315 Naive Operations(线段树区间整除区间)

    Problem DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n.b i ...

  9. HDU - 6315 Naive Operations (线段树+思维) 2018 Multi-University Training Contest 2

    题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列.有两种操作:1.将a序列区间[L,R]中的数全部+1:2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i, ...

随机推荐

  1. web API之post参数传递

    最近公司开发一个新产品,前端用的vue+element,后端用的.net core ,刚开始接触这块,接口写完后在调用接口时总出现问题,尤其是post传递参数时,很多时候都获取不到参数,没办法接口都要 ...

  2. redis三节点sentinel部署

    角色          ip       port master      127.0.0.1  6379  slave-1     127.0.0.1  6380  slave-2     127. ...

  3. Hibernate映射Map属性2

    Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...

  4. 图片验证码——base64编码的使用

    一.介绍: 1.base64编码简介: Base64就是一种编码格式.Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成 ...

  5. Web Mercator公开的小秘密

    网上已经有好多作者都不吝笔墨,写了好多有关 Web Mercator这个坐标系的前世今生.多搜罗多摄入,我们会得到很多有用的信息.今天讨论到 3758,3857,102100,900913…… 这些I ...

  6. Server.xml解析

    来源 本文整理自 <Tomcat内核设计剖析>.<Tomcat结构解析> 加上自己的理解.源码来自 Tomcat8.5 版本 <Server port="800 ...

  7. springboot项目pom添加依赖

    在dependency 后面  ALt+/  可以打开编辑窗口.

  8. 复习宝典之Spring

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第六章:Spring Spring容器是Spring的核心,一切Spring bean都存储在Spring容器内,并由其通过IoC技术管 ...

  9. MySQL学习【SQL语句上】

    1.连接服务端命令 1.mysql -uroot -p123 -h127.0.0.1 2.mysql -uroot -p123 -S /tmp/mysql.sock 3.mysql -uroot -p ...

  10. SpringBoot整合Swagger2以及生产环境的安全问题处理

    1.创建springboot项目 https://www.cnblogs.com/i-tao/p/8878562.html 这里我们使用多环境配置: application-dev.yml(开发环境) ...