构造一个序列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|1int 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;
}

转载于:https://www.cnblogs.com/void-f/p/9372092.html

[HDU6315]Naive Operations(线段树+树状数组)相关推荐

  1. HDU - 6315 Naive Operations(线段树+思维)

    题目链接:点击查看 题目大意:给出一个数列 a 和一个数列 b ,其中数列 a 初始时全部为 0 ,数列 b 初始时是一个 1 ~ n 的排列,接下来共有 m 次操作,每次操作分为两种: add l ...

  2. 多校训练 Naive Operations线段树区间更新

    http://acm.hdu.edu.cn/showproblem.php?pid=6315 维护ai/bi向下取整,怎么维护??a数组+1就是对应的b数组减一,b数组减到0时结果就该加1了 #inc ...

  3. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

    题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...

  4. 2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树

    I. Yukino With Subinterval 题目链接: Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a ...

  5. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  6. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  7. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  8. 8.8线段树和树状数组

    题目链接   http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28619#overview 密码 acmore 还是感觉不怎么会线段树,还是 ...

  9. 线段树/树状数组问题 | 问题集合

    写在前面 线段树代码实在冗长,于是乎能用树状数组直接搞的就懒得打线段树了(:溜 1.P2620[QZYZ] 校门外的树 描述 Description 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有 ...

  10. 花神游历各国 题解(小清新线段树/树状数组+并查集)

    题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...

最新文章

  1. 如何用php获取网页表格,PHP获取网页上任意表格中内容的通用程序的制作
  2. 单列表_正态分布检验(单样本K-S检验)
  3. python倒三角形粉色填充笔的形状海龟_Python001-Turtle(海龟绘图)详解
  4. LeetCode 274. H指数(排序,哈希)
  5. termux php 出错,android上的终端——termux
  6. git 理解 HEAD^与HEAD~
  7. flex中移除由MXML标签添加的侦听
  8. Linux换行符与windows换行符
  9. 寻找可接入正版音乐曲库的音乐API?来了解HIFIVE音乐开放平台!
  10. 计算机组装与维护重点难点,计算机组装与维修复习重难点.doc
  11. Mac 修改hosts
  12. 浅谈认识商业智能过程中遇到的困难
  13. 微信小程序云函数数组删除和添加并排序操作pull,push 用法
  14. 《霜冷长河》之《壮士》----英雄归来
  15. TQ2440 学习笔记—— 3、如何在ubuntu 9.10 下安装vmware-tools?
  16. Python3断网离线安装依赖包
  17. usb声卡驱动(六):usb声卡中的pcm打开和关闭
  18. Java的故事(猫与老鼠)
  19. 组图:1912年斯德哥尔摩奥运会
  20. Unity见缝插针游戏源码完整版

热门文章

  1. 你想让网站排名在百度或GOOGLE的第一位吗
  2. 5.5 tensorflow2实现多项式回归与神经网络、未来一个月购买量预测——python实战
  3. 19【14】DIEN:深度兴趣演化⽹络
  4. pandas.DataFrame将行(index)和列(column)进行转置
  5. java chatat delete,StringBuffer deleteCharAt(int index)
  6. python读取第一行设为字典_将csv读入字典,第一行成为名称
  7. 蚁群算法路径规划_环境感知与规划专题(十)——基于采样的路径规划算法(二)...
  8. java加按钮_用java写一个简单的学生信息管理系统
  9. leetcode Best Time to Buy and Sell Stock专题
  10. 力扣-1267 统计参与通信的服务器