[题解]P1311 [NOIP2011 提高组] 选择客栈
P1311 [NOIP2011 提高组] 选择客栈
P6032 选择客栈 加强版
只要\([l,r]\)区间之内存在一个\(i\)使得\(w[i]\le p\),这个区间就是符合条件的。
所以我们遍历每一个元素\(i\),根据贪心的思想我们维护\([1,i]\)区间内满足\(w[i]\le p\)的最大\(i\),记为\(mp\)。
对于每个元素\(i\),寻找\([1,mp]\)之间颜色和\(i\)相同的元素(不能是\(i\)本身)个数,累计答案即可。
可以用数组维护\([1,i]\)中各个颜色的位置,二分求解。时间复杂度\(O(n\log n)\)。
点击查看代码
#include<bits/stdc++.h>
#define N 2000010
#define int long long
using namespace std;
int n,k,p,ans,mp;
vector<int> pos[N];
signed main(){
cin>>n>>k>>p;
for(int i=1;i<=n;i++){
int k,v;
cin>>k>>v;
if(v<=p) mp=i;
if(!pos[k].empty()) ans+=upper_bound(pos[k].begin(),pos[k].end(),mp)-pos[k].begin();
pos[k].emplace_back(i);
}
cout<<ans<<"\n";
return 0;
}
容易发现,对\(pos[k]\)进行二分,得到的答案一定是单调的,所以放弃二分,直接动态维护每个当前颜色的答案即可,时间复杂度\(O(n)\)。
点击查看代码
#include<bits/stdc++.h>
#define N 2000010
#define int long long
using namespace std;
int n,k,p,ans,mp,res[N];
vector<int> pos[N];
signed main(){
memset(res,-1,sizeof res);
cin>>n>>k>>p;
for(int i=1;i<=n;i++){
int k,v;
cin>>k>>v;
if(v<=p) mp=i;
if(!pos[k].empty()){
while(res[k]+1<pos[k].size()&&pos[k][res[k]+1]<=mp) res[k]++;
ans+=res[k]+1;
}
pos[k].emplace_back(i);
}
cout<<ans<<"\n";
return 0;
}
[题解]P1311 [NOIP2011 提高组] 选择客栈的更多相关文章
- Noip2011 提高组 选择客栈
P1311 选择客栈 直通 思路: ①看题,我们可以发现一个显然的性质,即当最左边的客栈向右移动时,最右边的客栈时单调向右的,并且右端点往右的客栈也符合要求.(因为只要左侧有一个满足的,右边的自然可以 ...
- NOIP2011提高组 选择客栈
原题 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...
- 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...
- 刷题总结——mayan游戏(NOIP2011提高组day2T3)
题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- 【题解】NOIP2016提高组 复赛
[题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...
- 洛谷P1313 [NOIP2011提高组Day2T1]计算系数
P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
随机推荐
- Qt 图片轮播
最近研究了一下图片轮播,主要是用到了QPropertyAnimation这个类,具体代码示例如下: main.cpp #include <QApplication> #include &q ...
- WSL学习笔记
WSL学习笔记 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导. WS ...
- Element-plus组件库的MessageBox 消息弹框组件自定义样式的坑
一.问题描述: 在使用Element-plus组件库的MessageBox 消息弹框组件时,需要更改该组件的按钮样式,于是根据官网文档: 找到cancel-button-class.confirm-b ...
- 倒带ChunJun,同心前行|2022年度回顾&2023年共建规划
ChunJun是一个开始于2018年的批流一体数据集成框架项目,原名FlinkX.2022年2月22日,在FlinkX进行初版开源的整整四年后,技术团队决定对FlinkX进行整体升级,并更名为Chun ...
- 100万QPS短链系统如何设计?
前言 凌晨两点,监控大屏突然飙红--短链服务QPS突破80万! 数据库连接池告急,Redis集群响应延迟突破500ms. 这不是演习,而是某电商平台大促的真实场景. 当每秒百万级请求涌向你的短链服务, ...
- 本地搭建一个对嘴AI工具
图片+音频=说话视频 这就是本次需要实现的功能. 一:环境 window10电脑(GPU越大越好,我的是专享8G,有点小了). Python 3.11.9. CUDA Version: 12.9.(驱 ...
- 工作流引擎系统-基于橙单(flowable)的系统开发-流程配置举例
什么是工作流引擎(Workflow Engine ) 例如开发一个系统,最关键的部分不是系统的界面(增删改查之类),也不是和数据库之间的交互(读写数据库之类),而是如何根据业务逻辑开发出符合实际需要的 ...
- C# .NET ThreadPool 实现概述及
微信公众平台 (qq.com) 在.NET中,ThreadPool(线程池)是一个用于管理和优化线程使用的强大工具.线程池允许开发者在需要时创建线程,执行任务,并在任务完成后回收线程,从而避免了线程的 ...
- C# 通过反射 Model 转 XML
Order.OrderRequest m = new Order.OrderRequest(); m.Request = new Order.OrderRequest.Reque ...
- git冲突的解决与版本回退遇到的问题
这里有2个分支,master中的test.txt文件内容是master init,branch01中的test.txt文件内容是branch01 init 1.合并分支遇到冲突 在master上 ...