题意:
有一条河,沿河的一侧生活着一个部落。这个一字型的部落有n个据点,从左至右依次编号1~n。
部落的人们有时会在某个据点建立建筑,每个建筑都有各自的价值。一开始,每个据点的都没有建筑,价值都是0。如果在已有建筑的据点建立新的建筑,那么新的建筑会代替旧的建筑(旧的建筑就此消失)。
有两种操作C和Q:
1、C x y,表示在据点x建立一个价值为y的建筑。
2、Q x y,询问在据点x~y之间(包括x,y)的建筑中,价值第八大的建筑的价值是多少。
输入描述:
第一行,两个正整数n和k,表示据点的数量和操作的数量。
接下的k行,每行一个操作。

输出描述:
对于所有的Q操作,输出相应的第八大建筑的价值。

输入样例:
10 14
C 1 5
C 2 4
C 3 7
C 4 6
C 5 5
C 6 1
C 7 8
Q 1 10
C 8 3
C 9 6
C 10 3
Q 1 9
C 6 10
Q 1 10

输出样例:
0
3
4

暂无可以提交的地方。
忘记这道题是不是强制在线了,如果是的话提供一个比树状数组套线段树更简单的思路。

1.在线思路

线段树每个节点维护区间前8大,合并时合并两个有序数组,取出前八项即可,总复杂度为nm同阶O(m∗log2(n)∗8)O(m*log2(n)*8)O(m∗log2(n)∗8)
这个题也可以改一下,每次建立建筑时不替换旧建筑,那这个也很简单,只需要单点修改时逐个判断新来的值可以取代第几大,然后做一个数组中的值后移就行,复杂度没变。

#include<bits/stdc++.h>
using namespace std;typedef long long ll;const int maxn=1e5+7;int b[29];int m8[maxn<<2|1][9];void calc(int k[],int k1[],int k2[]){int p=1,q=1,id=1;while(p<=8&&q<=8){if(k1[p]>=k2[q]) b[id++]=k1[p++];else b[id++]=k2[q++];}while(p<=8) b[id++]=k1[p++];while(q<=8) b[id++]=k2[q++];for(int i=1;i<=8;++i) k[i]=b[i];
}void upd(int l,int r,int k,int id,int val){if(l==r) {m8[k][1]=val;return ;}int mid=l+r>>1;if(id<=mid) upd(l,mid,k<<1,id,val);else upd(mid+1,r,k<<1|1,id,val);calc(m8[k],m8[k<<1],m8[k<<1|1]);
}int* ask(int l,int r,int k,int L,int R){if(l>=L&&r<=R) return m8[k];int mid=l+r>>1;if(R<=mid) return ask(l,mid,k<<1,L,R);else if(L>mid) return ask(mid+1,r,k<<1|1,L,R);int* k1=ask(l,mid,k<<1,L,R);int* k2=ask(mid+1,r,k<<1|1,L,R);int *kk=new int[9];calc(kk,k1,k2);return kk;
}char s[9];
int main(){int n,q,id,l,r,x;cin>>n>>q;while(q--){scanf("%s%d%d",s,&l,&r);if(s[0]=='C') upd(1,n,1,l,r);else printf("%d\n",ask(1,n,1,l,r)[8]);}return 0;
}

2.离线思路

很明显直接整体二分就可以做了。
将那个经典的带修改区间第K大的代码粘贴来即可。

19蓝桥国赛B组C/C++ I第八大奇迹相关推荐

  1. 蓝桥杯2013年国赛A组——网络寻路(DFS和中转边巧解)

    蓝桥杯2013年国赛A组--网络寻路 1.题目描述 2.输入输出 3.样例输入和输出 4.题目分析 1.首先明确,题目中的目的地有两种,一种是回到原点,一种是到达没有到达的地方 2.在路径中经过的点不 ...

  2. 蓝桥杯第十三届国赛PythonB组题解

    蓝桥杯第十三届国赛PythonB组题解 [写在前边] 这次的题还是比较难的,只做出来7道,交上去6道,还有一半是暴力做的

  3. 题解动态规划:蓝桥杯2022国赛B组 题解 A题目

    在这组题(蓝桥杯C/C++ B组 国赛)里面挑了几道喜欢的题目,做了一下,笔记思路如下.(其实是我觉得能做出的题 ) 题目图片来源于:CSDN 罚时大师月色 A:2022 [题目大意] 请问2022, ...

  4. [2019蓝桥杯国赛B组c++][最优包含][排列数][解谜游戏][第八大奇迹]

    个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 一个大佬写了填空题的答案,点击下面链接 最优包含 排列数 解谜游戏 第八大奇迹 一个大佬写了填空题的答 ...

  5. 蓝桥杯2020年国赛-JavaB组赛题解析(填空题)

    赛题目录 A.美丽的2(签到) 1.原试题 2.简要分析 3.实现代码 4.答案 B.扩散(多源BFS) 1.原试题 2.简要分析 3.实现代码 4.答案 C.阶乘约数(数论) 1.原试题 2.简要分 ...

  6. 2017年第八届蓝桥杯国赛B组C++真题汇总

    1. 36进制 对于16进制,我们使用字母A-F来表示10及以上的数字. 如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z表示35,AA表示370 你能算出 MANY 表示的 ...

  7. 2019蓝桥杯国赛B组第九题

    题目描述: 有一条河,沿河的一侧生活着一个部落.这个一字型的部落有n个据点,从左至右依次编号1~n. 部落的人们有时会在某个据点建立建筑,每个建筑都有各自的价值.一开始,每个据点的都没有建筑,价值都是 ...

  8. 2021蓝桥杯国赛B组C/C++个人记录

    以下为个人场上所提交答案,欢迎大家指出错误,后续会更正正确题解. 个人提交:25 说明: Mbps是M bit per second, MB是 M Byte,bit是比特,Byte是字节,1Byte= ...

  9. 2020第十一届蓝桥杯国赛Python组

    A美丽的2 答案:563 res = 0 for i in range(1, 2021):if '2' in str(i):res += 1 print(res) # 563 B合数个数 模拟即可 答 ...

最新文章

  1. Android中自定义View的研究 -- 在XML中引用自定义View
  2. 【javascript位置属性】screen对象
  3. Java的native关键字
  4. 利用mysql提供的c语言接口操作数据库
  5. 对计算机视觉研究的认识,计算机视觉(作业)
  6. 动力环境监控系统论文_动力环境监控系统现状及在电源维护中的作用
  7. python最简单的游戏源代码_Python 练习: 简单角色游戏程序
  8. matlab元胞元素_MATLAB元胞数组(cell)知识
  9. day01 --环境搭建 注册 表单校验
  10. python opencv轮廓检测_OpenCV-Python实现轮廓检测实例分析
  11. snagit 9注册码
  12. Linux系统交换空间详解
  13. 整数平方一定大于零吗?
  14. leetcode 183. Customers Who Never Order
  15. Kafka consumer多线程下not safe for multi-threaded access问题
  16. java封装统一返回结果工具类(CommonResultUtils)
  17. RHCS基本理論(台湾人写的不错的文章)
  18. 金属材料领域模型与通用语言之钢铁加工——面向软件领域的简介
  19. Mongodb常用查询语句_笔记
  20. java 对接乐橙云 获取AccessToken

热门文章

  1. 我的极限Scrum实践
  2. Hive分析、窗口函数
  3. 转“打工皇帝”唐骏的经验之谈
  4. 数值分析多种算法C语言代码
  5. 【5G核心网】5G概念以及名词缩写解释
  6. 第二章 信息系统服务管理
  7. qrcode二维码实现
  8. 谷粒商城 Nginx
  9. File-Upload
  10. 图片合成gif如何做?怎样将图片合成动图效果?