jzoj6801-NOIP2020.9.19模拟patrick【树状数组】
正题
题目大意
nnn个连续的数,第iii个为hih_ihi。有操作
- 给出一个HHH,询问大于等于HHH的数能组成多少个联通块
- 修改一个位置的数。
解题思路
考虑计算连通块尾的数量,我们可以发现一个位置作为联通块尾部当且仅当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)logn)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【树状数组】相关推荐
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组
在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 ...
- Codeforces 216D Spider#39;s Web 树状数组+模拟
题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟
Energy stones 题意 有n块石头,每块有初始能量E[i],每秒石头会增长能量L[i],石头的能量上限是C[i],现有m次时刻,每次会把[s[i],t[i]]的石头的能量吸干,问最后得到了多 ...
- P2345 奶牛集会(树状数组or模拟)
题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...
- 「模拟赛20180307」三元组 exclaim 枚举+树状数组
题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...
- JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)
题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行. ...
最新文章
- 分享九款构建响应式网站的最佳PHP框架
- ReactNative环境配置的坑
- 基于移位寄存器的序列密码
- 1.3 Error和Exception的异同
- 处理字符串_2_遍历字符串里的每个值
- JMeter 保持sessionId
- Github(2)-本地配置git
- hash地址_深入浅出一致性Hash原理
- Ancient Berland Circus CodeForces - 1C
- 语音合成论文与韩国小哥“撞车”后续:英伟达“赶紧”把代码开源了
- 4-2017-12-2-2约瑟夫环
- JSP -java service pages
- 【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
- csv excel 对比
- Numpy中 tolist() 的用法
- JS+MySQL获取 京东 省市区 地区
- matlab指数e是如何表示,Matlab中表达e怎么操作?表达e方法详解
- chorme浏览器完美保存整个网页
- angular ng-show中表达式的写法
- 专升本管理学知识点总结——管理环境与创新
热门文章
- 电脑重新分区扩大c盘_两种方法,给电脑C盘增加10G的容量,电脑焕然一新
- python多线程队列处理_Python线程和队列使用的一点思考
- 手把手教你java快速过滤关键词
- 查询两个日期间隔天数怎么算_大厂都是怎么用Java8代替SimpleDateFormat?
- mysql pmod项目_内置函数 - 数学函数 - 《Apache Doris 文档(201812)》 - 书栈网 · BookStack...
- python求函数极值_python 遗传算法求函数极值的实现代码
- 软件测试基础知识bbst,摘自James Bach对软件测试新手的建议
- leedcode05 找出缺失的观测数据(思路加详解)
- TCP(发消息:简易代码实现)
- 计蒜客 逃生+动态规划