题链:

树状数组,,,
本题思路挺巧妙。
考虑这种暴力算法:(设H[i]为i位置的高度,水面的高度为B)
从左枚举到右,如果 H[i-1]<B<=H[i],那么就可以贡献答案,即 ANS++。
基于上述暴力,可以得出:
如果 H[i-1] < H[i],且询问的 B 在这两个H值之间,则会贡献答案。
所以,用数据结构维护区间修改(把区间H[i-1]+1~H[i]的值加一)和单点查询(查询当前的水面高度B的ANS)即可。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 200500
using namespace std;
int H[MAXN],tmp[MAXN*3];
int N,M,tnt;
struct Question{
int a,b,c;
}Q[MAXN];
struct BIT{
int A[MAXN*3],len;
void Reset(int n){
len=n; memset(A,0,sizeof(A));
}
int Lowbit(int x){return x&-x;}
void Modify(int l,int r,int x){
r++;
while(l<=len) A[l]+=x,l+=Lowbit(l);
while(r<=len) A[r]-=x,r+=Lowbit(r);
}
int Query(int p){
static int ret; ret=0;
while(p) ret+=A[p],p-=Lowbit(p);
return ret;
}
}DT;
int main(){
scanf("%d%d",&N,&M); tmp[++tnt]=0;
for(int i=1;i<=N;i++) scanf("%d",&H[i]),tmp[++tnt]=H[i];
for(int i=1;i<=M;i++){
scanf("%d",&Q[i].a);
if(Q[i].a==1) scanf("%d",&Q[i].b),tmp[++tnt]=Q[i].b;
else scanf("%d%d",&Q[i].b,&Q[i].c),tmp[++tnt]=Q[i].c;
}
sort(tmp+1,tmp+tnt+1);
tnt=unique(tmp+1,tmp+tnt+1)-tmp-1;
DT.Reset(tnt); H[0]=lower_bound(tmp+1,tmp+tnt+11,H[0])-tmp;
for(int i=1;i<=N;i++){
H[i]=lower_bound(tmp+1,tmp+tnt+1,H[i])-tmp;
if(H[i]>H[i-1]) DT.Modify(H[i-1]+1,H[i],1);
}
for(int i=1;i<=M;i++){
if(Q[i].a==1){
Q[i].b=lower_bound(tmp+1,tmp+tnt+1,Q[i].b)-tmp;
printf("%d\n",DT.Query(Q[i].b));
}
else{
if(H[Q[i].b]>H[Q[i].b-1]) DT.Modify(H[Q[i].b-1]+1,H[Q[i].b],-1);
if(H[Q[i].b+1]>H[Q[i].b]) DT.Modify(H[Q[i].b]+1,H[Q[i].b+1],-1);
H[Q[i].b]=lower_bound(tmp+1,tmp+tnt+1,Q[i].c)-tmp;
if(H[Q[i].b]>H[Q[i].b-1]) DT.Modify(H[Q[i].b-1]+1,H[Q[i].b],1);
if(H[Q[i].b+1]>H[Q[i].b]) DT.Modify(H[Q[i].b]+1,H[Q[i].b+1],1);
}
}
return 0;
}

  

●洛谷 P3616 富金森林公园的更多相关文章

  1. 洛谷 P3616 富金森林公园题解(树状数组)

    P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...

  2. 树状数组 洛谷P3616 富金森林公园

    P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...

  3. 洛谷P3616 富金森林公园

    题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有一个海拔高度,所有严格低于 ...

  4. 洛谷 P3616 富金森林公园 [树状数组]

    传送门 维护一个山脉,单点修改,查询有多少山峰高出水面 我是沙茶沙茶题都不会做只想到无修改可以用扫描线 答案就是所有比水面高的-相邻都比水面高的啊 因为没有区间询问写个$BIT$都可以 有区间询问?可 ...

  5. 【树状数组 思维题】luoguP3616 富金森林公园

    树状数组.差分.前缀和.离散化 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积 ...

  6. Luogu P3616 【富金森林公园】

    我们首先考虑一块石头高度变化对每个高度的查询的答案的影响, 即我们要记录,对于每个高度的查询的答案 所以要离散化高度(不然哪开的下数组啊) 不难发现,一次变化的对于不同高度的影响,对于一段连续高度是相 ...

  7. 【洛谷】P1064 金明的预算方案(dp)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  8. Luogu 3616 富金森林公园

    刚看到此题的时候:sb分块??? Rorshach dalao甩手一句看题 于是回去看题……果然是题读错了…… [思路] 对权值离散化后(要先读入所有输入里的权值一起离散化……所以一共有4e4个数据( ...

  9. 洛谷 P1477 [NOI2008]假面舞会

    题目链接 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方 ...

随机推荐

  1. 团队作业9——事后分析(Beta版本)

    事后诸葛亮分析 1.         总结 团队合照   a. 项目管理之事后诸葛亮会 ·设想和目标 (1)我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 个人学习 ...

  2. python 操作SQLAlchemy

    SQLAlchemy python链接 pymysql mysql+pymysql://<username>:<password>@<host>/<dbnam ...

  3. EMC CX4-480服务器raid磁盘数据恢复案例

    [用户信息]上海某公司 [故障描述]需要进行数据恢复的设备是一台EMC CX4的存储服务器,因为硬盘出现故障导致整个存储阵列瘫痪.整个LUN是由7块1TB的硬盘组成的RAID 5.但服务器共有10块硬 ...

  4. day-3 python多线程编程知识点汇总

    python语言以容易入门,适合应用开发,编程简洁,第三方库多等等诸多优点,并吸引广大编程爱好者.但是也存在一个被熟知的性能瓶颈:python解释器引入GIL锁以后,多CPU场景下,也不再是并行方式运 ...

  5. (function(root,factory){})(this,function($){}) 一个立即执行的匿名函数自调

    因为新公司用到ocx 我就开始看原来的代码 无意中发现这个 可能原来比较low吗(虽然现在也很low吧)没发现这个东东 还可以这样写 于是乎我开始了探索 完整代码如下 HTML <div id= ...

  6. PHP之this和self

    self在对象中自己调用自己使用 $this在实例化后使用$this方法 在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就 ...

  7. threadlocal原理及常用应用场景

    1.深入解析ThreadLocal类 ThreadLocal类提供的几个方法: public T get() { } public void set(T value) { } public void  ...

  8. Python内置函数(12)——str

    英文文档: class str(object='') class str(object=b'', encoding='utf-8', errors='strict') Return a string  ...

  9. 容器化的 DevOps 工作流

    对于 devops 来说,容器技术绝对是我们笑傲江湖的法宝.本文通过一个小 demo 来介绍如何使用容器技术来改进我们的 devops 工作流. devops 的日常工作中难免会有一些繁琐的重复性劳动 ...

  10. XML之XPath

    1.在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档节点(或称为根节点). 1.1 XPath 术语 节点(Node) 在 XPath 中,有七种类型的节点:元 ...