正题


题目大意

nnn个连续的数,第iii个为hih_ihi​。有操作

  1. 给出一个HHH,询问大于等于HHH的数能组成多少个联通块
  2. 修改一个位置的数。

解题思路

考虑计算连通块尾的数量,我们可以发现一个位置作为联通块尾部当且仅当hi≥Hh_i\geq Hhi​≥H且hi+1<Hh_{i+1}<Hhi+1​<H。

也就是如果hi+1>hih_{i+1}>h_ihi+1​>hi​,那hih_ihi​能作为尾部的情况当且仅当H∈[hi+1+1,hi]H\in[h_{i+1}+1,h_i]H∈[hi+1​+1,hi​]。用树状数组维护每个位置的贡献区间即可。

时间复杂度O((n+q)log⁡n)O(\ (n+q)\ \log n)O( (n+q) logn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define lowbit(x) (x&-x)
using namespace std;
const int N=2e6+10,S=2e6+1;
int n,m,t[N],a[N];
void Change(int x,int w){x++;while(x<S){t[x]+=w;x+=lowbit(x);}return;
}
int Ask(int x){int ans=0;x++;while(x){ans+=t[x];x-=lowbit(x);}return ans;
}
int main()
{freopen("patrick.in","r",stdin);freopen("patrick.out","w",stdout);scanf("%d%d",&n,&m);a[n+1]=0;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=0;i<=n;i++)if(a[i]>a[i+1]){Change(a[i+1],1);Change(a[i],-1);}int last=0;for(int i=1;i<=m;i++){char op[5];int x,y;scanf("%s",op);if(op[0]=='Q'){scanf("%d",&x);x^=last;x--;printf("%d\n",last=Ask(x));}else{scanf("%d%d",&x,&y);x^=last;y^=last; if(a[x-1]>a[x])Change(a[x],-1),Change(a[x-1],1);if(a[x]>a[x+1])Change(a[x],1),Change(a[x+1],-1);a[x]=y;if(a[x-1]>a[x])Change(a[x],1),Change(a[x-1],-1);if(a[x]>a[x+1])Change(a[x],-1),Change(a[x+1],1);}}
}

jzoj6801-NOIP2020.9.19模拟patrick【树状数组】相关推荐

  1. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  2. 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组

    在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己  ...

  3. Codeforces 216D Spider#39;s Web 树状数组+模拟

    题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...

  4. 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组

    题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...

  5. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  6. 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟

    Energy stones 题意 有n块石头,每块有初始能量E[i],每秒石头会增长能量L[i],石头的能量上限是C[i],现有m次时刻,每次会把[s[i],t[i]]的石头的能量吸干,问最后得到了多 ...

  7. P2345 奶牛集会(树状数组or模拟)

    题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...

  8. 「模拟赛20180307」三元组 exclaim 枚举+树状数组

    题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...

  9. JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)

    题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行. ...

最新文章

  1. 分享九款构建响应式网站的最佳PHP框架
  2. ReactNative环境配置的坑
  3. 基于移位寄存器的序列密码
  4. 1.3 Error和Exception的异同
  5. 处理字符串_2_遍历字符串里的每个值
  6. JMeter 保持sessionId
  7. Github(2)-本地配置git
  8. hash地址_深入浅出一致性Hash原理
  9. Ancient Berland Circus CodeForces - 1C
  10. 语音合成论文与韩国小哥“撞车”后续:英伟达“赶紧”把代码开源了
  11. 4-2017-12-2-2约瑟夫环
  12. JSP -java service pages
  13. 【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
  14. csv excel 对比
  15. Numpy中 tolist() 的用法
  16. JS+MySQL获取 京东 省市区 地区
  17. matlab指数e是如何表示,Matlab中表达e怎么操作?表达e方法详解
  18. chorme浏览器完美保存整个网页
  19. angular ng-show中表达式的写法
  20. 专升本管理学知识点总结——管理环境与创新

热门文章

  1. 电脑重新分区扩大c盘_两种方法,给电脑C盘增加10G的容量,电脑焕然一新
  2. python多线程队列处理_Python线程和队列使用的一点思考
  3. 手把手教你java快速过滤关键词
  4. 查询两个日期间隔天数怎么算_大厂都是怎么用Java8代替SimpleDateFormat?
  5. mysql pmod项目_内置函数 - 数学函数 - 《Apache Doris 文档(201812)》 - 书栈网 · BookStack...
  6. python求函数极值_python 遗传算法求函数极值的实现代码
  7. 软件测试基础知识bbst,摘自James Bach对软件测试新手的建议
  8. leedcode05 找出缺失的观测数据(思路加详解)
  9. TCP(发消息:简易代码实现)
  10. 计蒜客 逃生+动态规划