题意:N个高度为hi的果子,摘果子的个数是从位置1开始从左到右的严格递增子序列的个数。有M次操作,每次操作对初始序列修改位置p的果子高度为q。每次操作后输出修改后能摘到得数目。

分析:将序列分为左、右两部分,每次修改之后的结果是p左部到p递增的子序列长度,加上右部第一个高度大于max(q,p位置之前最大的高度)位置开始的递增子序列长度。

左部的查询可以线性递推预处理得到,右部的查询需借助ST表预处理出区间最大值,并二分求得位置。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = ;
int N, m, tot;
int h[];
int st[MAXN][-__builtin_clz(MAXN)];
int dp[];
int sel[], pre[], c[]; void init_st() {
int l = - __builtin_clz(N);
for(int i=;i<N;++i) st[i][] = h[i];
for(int j=;j<l;++j)
for (int i=;i<+N-(<<j);++i)
st[i][j+] = max(st[i][j], st[i+(<<j)][j]);
} int rmq(int l, int r) {
int k = - __builtin_clz(r - l + );
return max(st[l][k], st[r-(<<k)+][k]);
} int getbignext(int pos, int val) {
int l = pos + , r = N, mid;
while (r > l) {
mid = (l + r) / ;
if (rmq(pos+, mid) <= val) l = mid + ;
else r = mid;
}
return l;
}
void initdp() {
int cnt = ;
dp[N] = ;
for (int i = N - ; i >= ; i--) {
int pos = getbignext(i, h[i]);
dp[i] = dp[pos] + ;
}
sel[] = ; pre[] = -; c[] = ;
int last = , lasth = h[];
for (int i = ; i < N; i++) {
pre[i] = last;
if (h[i] > lasth){
sel[i] = ;
last = i;
lasth = h[i];
cnt++;
} else sel[i] = ;
c[i] = cnt;
}
tot = cnt;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T;scanf("%d",&T);
while(T--){
int Q;
scanf("%d%d",&N,&Q);
for(int i=;i<N;++i) scanf("%d",&h[i]);
init_st();
initdp();
int p,q;
while(Q--){
scanf("%d%d",&p,&q);
p--;
int res=;
if(sel[p]){ //这个位置保持递增
if(p==){
res = dp[getbignext(p,q)]+;
}
else{
if(q>h[pre[p]]){
res += c[p];
res += dp[getbignext(p,q)];
}
else{
res += c[pre[p]];
res += dp[getbignext(p,h[pre[p]])];
}
}
}
else{
if(q<=h[pre[p]]){
res= tot;
}
else{
res += c[pre[p]]+;
res += dp[getbignext(p,q)];
}
}
printf("%d\n",res);
}
}
return ;
}

最新文章

  1. Jsoup系列学习(2)-解析html文件
  2. [bzoj1670][Usaco2006 Oct]Building the Moat
  3. HTTP和HTTPS
  4. guava学习--Preconditions
  5. 2013eoe移动开发者大会圆满落幕
  6. CSS笔记(一)CSS规则
  7. 题目:在泛型为Integer的容器内添加一个字符串.
  8. response和request
  9. qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)
  10. Java I/O流-PipedInputStream、PipedOutputStream
  11. java方法中只有值传递,没有引用传递
  12. [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置
  13. MySQL Database Command Line Client
  14. ansible 批量安装zabbix agentd客户端
  15. Spark技术内幕:Executor分配详解
  16. SpringBoot JPA(实现查询多值)
  17. arrayList和vector的区别--2019-4-16
  18. 编程规范(初尝ES6与webpack)
  19. 7.6.2 break 语句
  20. Python入门 更换pip源的方法

热门文章

  1. 与HttpSessionListener接口有关的方法是。
  2. 数据挖据之GeoHash核心原理解析
  3. vi 的使用,很详细
  4. 框架应用 : Spring - 开发详述
  5. grid++report中篇
  6. iOS-将NSString转换成UTF8编码的NSString
  7. CNBlog客户端--第一阶段记录
  8. angualar入门学习-- 作用域$scope
  9. phantomjs学习之网页访问测速
  10. 【Python之路】第十八篇--MySQL(一)