链接:https://nanti.jisuanke.com/t/16878

分析:先挖个坑。。这题貌似有问题,按题意应该是能砍则砍,但是样例是按能得到的最大数来算的。。下面先按能砍则砍来分析。。

首先预处理一下,f[i]表示从1砍到i,能砍的最大数,b[i]表示如果把i砍了,从i往后一共能砍多少棵,MAX[i]表示从1到i,砍过的树中的最大高度。f和MAX直接O(n)处理就行了,b[i]用线段树来处理,b[i]=b[j]+1,j是满足h[j]>h[i]且j>i的j中最小值,复杂度为O(nlogn)。

然后询问,如果b>MAX[a-1],第a棵修改后依然要砍,因此ans=1+f[a-1]+b[j],j是满足j>a且h[j]>b的j中最小值;否则,不砍第a棵,ans=f[a-1]+b[j],j是满足j>a且h[j]>MAX[a-1]的j中最小值。复杂度为O(nlogn)。

以下代码不能AC,样例都过不了。。坐等出题人修改题意或样例再改。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=4e5+5;
 6 int n,m;
 7 class segTree{
 8 public:
 9     int a[maxn],s[maxn*4];
10     void build(int node,int begin,int end){
11         if(begin==end){
12             s[node]=begin;
13         }else{
14             build(2*node,begin,(begin+end)/2);
15             build(2*node+1,(begin+end)/2+1,end);
16             if(a[s[2*node]]>=a[s[2*node+1]])
17                 s[node]=s[2*node];
18             else
19                 s[node]=s[2*node+1];
20         }
21     }
22     int query(int node,int begin,int end,int left,int right,int low_bound){
23         if(left>end||right<begin)
24             return -1;
25 //        if(begin>=left&&end<=right)
26 //            return s[node];
27         if(begin==end){
28             if(a[begin]>low_bound)return begin;
29             return -1;
30         }
31         int q1,q2;
32         if(a[s[2*node]]>low_bound)return query(2*node,begin,(begin+end)/2,left,right,low_bound);
33         if(a[s[2*node+1]]>low_bound)return query(2*node+1,(begin+end)/2+1,end,left,right,low_bound);
34         return -1;
35     }
36 }st;
37 int Max[maxn],sum_front[maxn],sum_back[maxn];
38 int h[maxn];
39 int main(){
40 //    freopen("e:\\in.txt","r",stdin);
41     scanf("%d%d",&n,&m);
42     Max[0]=0,sum_front[0]=0;
43     for(int i=1;i<=n;i++){
44         scanf("%d",&h[i]);
45         st.a[i]=h[i];
46         if(h[i]>Max[i-1]){
47             sum_front[i]=sum_front[i-1]+1;
48             Max[i]=h[i];
49         }else{
50             sum_front[i]=sum_front[i-1];
51             Max[i]=Max[i-1];
52         }
53     }
54     int k;
55     ta.init(n);
56     st.build(1,1,n);
57     sum_back[n]=1;
58     for(int i=n-1;i>=1;i--){
59         k=st.query(1,1,n,i+1,n,h[i]);
60         if(k!=-1)sum_back[i]=1+sum_back[k];
61         else sum_back[i]=1;
62     }
63     int a,b;
64     for(int i=0;i<m;i++){
65         scanf("%d%d",&a,&b);
66         int ans=sum_front[a-1];
67         if(b>Max[a-1]){
68             ans++;
69             k=st.query(1,1,n,a+1,n,b);
70             if(k!=-1)ans+=sum_back[k];
71         }else{
72             k=st.query(1,1,n,a+1,n,Max[a-1]);
73             if(k!=-1)
74             ans+=sum_back[k];
75         }
76         printf("%d\n",ans);
77     }
78     return 0;
79 }

转载于:https://www.cnblogs.com/7391-KID/p/7478889.html

ACM 竞赛高校联盟 练习赛 第六场 光头强的强迫症(线段树)相关推荐

  1. ACM 竞赛高校联盟 练习赛 第六场 韩梅梅的抽象画(图论水题)

    链接:https://nanti.jisuanke.com/t/16876 题意:给定一个无向图,求是否含3个或以上有根树,且根在同一个环上. 分析:只含一个环,剩下的都是树,因此必然有n==m,满足 ...

  2. ACM 竞赛高校联盟 练习赛 第二场 BC

    B. 题解: 枚举约数即可,判断n个数能否填约数的整数倍 #include <iostream> #include <cstring> #include <cstdio& ...

  3. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

  4. 计蒜客 ACM竞赛高校联盟训练赛 第8场 煎牛排

    水一水. https://nanti.jisuanke.com/t/24205 煎牛排 题目描述 又是一个难得的周六,是时候远离食堂和外卖出去大吃一顿了.圈内知名吃货AA正想着中午去吃汉堡炸鸡烤肉火锅 ...

  5. 牛客网暑期ACM多校训练营(第六场)J Heritage of skywalkert

    题目链接:https://www.nowcoder.com/acm/contest/144/J 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  6. 牛客网暑期ACM多校训练营(第六场)J-Heritage of skywalkert

    链接:https://www.nowcoder.com/acm/contest/144/J 来源:牛客网 题目描述 skywalkert, the new legend of Beihang Univ ...

  7. 牛客网暑期ACM多校训练营(第六场) - (A,C,J)

    比赛链接:https://www.nowcoder.com/acm/contest/144#question A Singing Contest 题意:有编号1~2^n的2^n个人参加唱歌比赛,每人有 ...

  8. 牛客网暑期ACM多校训练营(第六场) C.Generation I (思维+逆元+组合数学)

    题目链接 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Oak is given N e ...

  9. 2018牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit (树状数组)

    链接:https://ac.nowcoder.com/acm/contest/148/A 来源:牛客网 Rikka with Lowbit 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C ...

  10. 牛客网暑期ACM多校训练营(第五场): F. take(期望+线段树)

    题目描述 Kanade has n boxes , the i-th box has p[i] probability to have an diamond of d[i] size. At the ...

最新文章

  1. springmvc二十三:日期格式化
  2. 开始Windows Embedded Compact 7的第一个项目——虚拟机上的CEPC
  3. 魔兽服务器状态页面,谁动了我的服务器 WOW大服务器优势何时展现
  4. 让source insight更好的支持中文
  5. visual studio 2010运行速度提速
  6. php字符集转换,php字符集转换
  7. opencomm在c语言中的作用,你能用C语言编写面向对象的代码吗?
  8. 微信和QQ可以关闭广告了,每次能关6个月
  9. HTML5模拟衣服撕扯动画
  10. python遍历json_Python学习笔记:Python3中Json数据遍历取指定值
  11. 软件测试面试必考的SQL语句
  12. Command ‘docker‘ not found, but can be installed with:
  13. dos2unix介绍
  14. noi2016试题C语言,noip2016普及组初赛试题和答案.pdf
  15. linux双显卡自动切换,Deepin(Linux)双显卡之bumblebee(大黄蜂)、Prime及手动切换方案...
  16. 摆脱 AI 生产“小作坊”:如何基于 Kubernetes 构建云原生 AI 平台
  17. h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)...
  18. 【Stanford Online】Engineering: Algorithms1 NO.2 Asymptotic analysis
  19. pdf转jpg在线转换免费
  20. 全球与中国远程摄像机市场深度研究分析报告

热门文章

  1. 微信小程序教程笔记5
  2. early stopping softmax批量梯度下降(BGD)手动实现
  3. caffe上手:微调CaffeNet用于车颜色识别
  4. 《小欢喜》欢喜人生,人生如画,画里有话,话说人生
  5. python实践统计学中的三大相关性系数,并绘制相关性分析的热力图
  6. 2019ccpc河北省赛总结
  7. Outlook验证服务器证书,OUTLOOK2019 解决 无法验证您连接到的服务器使用的安全证书...
  8. linux闹钟命令,Linux基础命令一
  9. 2021-06-27函数定义与参数
  10. 区块链 xuperchain xuper-java-sdk 部署使用EVM 合约 教程