19蓝桥国赛B组C/C++ I第八大奇迹
题意:
有一条河,沿河的一侧生活着一个部落。这个一字型的部落有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第八大奇迹相关推荐
- 蓝桥杯2013年国赛A组——网络寻路(DFS和中转边巧解)
蓝桥杯2013年国赛A组--网络寻路 1.题目描述 2.输入输出 3.样例输入和输出 4.题目分析 1.首先明确,题目中的目的地有两种,一种是回到原点,一种是到达没有到达的地方 2.在路径中经过的点不 ...
- 蓝桥杯第十三届国赛PythonB组题解
蓝桥杯第十三届国赛PythonB组题解 [写在前边] 这次的题还是比较难的,只做出来7道,交上去6道,还有一半是暴力做的
- 题解动态规划:蓝桥杯2022国赛B组 题解 A题目
在这组题(蓝桥杯C/C++ B组 国赛)里面挑了几道喜欢的题目,做了一下,笔记思路如下.(其实是我觉得能做出的题 ) 题目图片来源于:CSDN 罚时大师月色 A:2022 [题目大意] 请问2022, ...
- [2019蓝桥杯国赛B组c++][最优包含][排列数][解谜游戏][第八大奇迹]
个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 一个大佬写了填空题的答案,点击下面链接 最优包含 排列数 解谜游戏 第八大奇迹 一个大佬写了填空题的答 ...
- 蓝桥杯2020年国赛-JavaB组赛题解析(填空题)
赛题目录 A.美丽的2(签到) 1.原试题 2.简要分析 3.实现代码 4.答案 B.扩散(多源BFS) 1.原试题 2.简要分析 3.实现代码 4.答案 C.阶乘约数(数论) 1.原试题 2.简要分 ...
- 2017年第八届蓝桥杯国赛B组C++真题汇总
1. 36进制 对于16进制,我们使用字母A-F来表示10及以上的数字. 如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z表示35,AA表示370 你能算出 MANY 表示的 ...
- 2019蓝桥杯国赛B组第九题
题目描述: 有一条河,沿河的一侧生活着一个部落.这个一字型的部落有n个据点,从左至右依次编号1~n. 部落的人们有时会在某个据点建立建筑,每个建筑都有各自的价值.一开始,每个据点的都没有建筑,价值都是 ...
- 2021蓝桥杯国赛B组C/C++个人记录
以下为个人场上所提交答案,欢迎大家指出错误,后续会更正正确题解. 个人提交:25 说明: Mbps是M bit per second, MB是 M Byte,bit是比特,Byte是字节,1Byte= ...
- 2020第十一届蓝桥杯国赛Python组
A美丽的2 答案:563 res = 0 for i in range(1, 2021):if '2' in str(i):res += 1 print(res) # 563 B合数个数 模拟即可 答 ...
最新文章
- Android中自定义View的研究 -- 在XML中引用自定义View
- 【javascript位置属性】screen对象
- Java的native关键字
- 利用mysql提供的c语言接口操作数据库
- 对计算机视觉研究的认识,计算机视觉(作业)
- 动力环境监控系统论文_动力环境监控系统现状及在电源维护中的作用
- python最简单的游戏源代码_Python 练习: 简单角色游戏程序
- matlab元胞元素_MATLAB元胞数组(cell)知识
- day01 --环境搭建 注册 表单校验
- python opencv轮廓检测_OpenCV-Python实现轮廓检测实例分析
- snagit 9注册码
- Linux系统交换空间详解
- 整数平方一定大于零吗?
- leetcode 183. Customers Who Never Order
- Kafka consumer多线程下not safe for multi-threaded access问题
- java封装统一返回结果工具类(CommonResultUtils)
- RHCS基本理論(台湾人写的不错的文章)
- 金属材料领域模型与通用语言之钢铁加工——面向软件领域的简介
- Mongodb常用查询语句_笔记
- java 对接乐橙云 获取AccessToken