洛谷 P1311 [NOIP2011 提高组] 选择客栈 & P6032 选择客栈 加强版(双指针)
时间:2021-08-07
本文章向大家介绍洛谷 P1311 [NOIP2011 提高组] 选择客栈 & P6032 选择客栈 加强版(双指针),主要包括洛谷 P1311 [NOIP2011 提高组] 选择客栈 & P6032 选择客栈 加强版(双指针)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
传送门
加强版传送门
解题思路
首先很显然,对于同一种色调的客栈来说,从小到大枚举左端点 L,符合要求的客栈 R~N 一定是满足 R 单调递增的。
而且选择的咖啡店也是随着 L 的增加间断着递增。
所以就可以双指针(准确说是多指针)将时间复杂度降至O(n)。
双倍经验双倍快乐
AC代码
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=2e6+5;
int n,k,p,a[maxn],b[maxn],c[maxn],mid=n+1,r[maxn];
long long ans;
vector<int> num[10005];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k>>p;
for(int i=0;i<=k;i++) num[i].push_back(0),r[i]=1;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
num[a[i]][0]++;
num[a[i]].push_back(i);
}
for(int i=1;i<=n;i++) if(b[i]<=p){
mid=i;
break;
}
for(int i=1;i<=n;i++){
while(mid<=n&&(mid<i||b[mid]>p)) mid++;
if(mid>n) break;
while(r[a[i]]<=num[a[i]][0]&&i>=num[a[i]][r[a[i]]]) r[a[i]]++;
while(r[a[i]]<=num[a[i]][0]&&num[a[i]][r[a[i]]]<mid) r[a[i]]++;
ans+=num[a[i]][0]-r[a[i]]+1;
}
cout<<ans;
return 0;
}
//NOIP2011提高组Day1 t2
原文地址:https://www.cnblogs.com/yinyuqin/p/15111520.html
- Entity Framework——配置文件设置
- 如何安装SAS并配置连接Hive/Impala
- Entity Framework——记录执行的命令信息
- 【BlackHat 2017 议题剖析】连接的力量:GitHub 企业版漏洞攻击链构造之旅
- CVE-2015-1641 Word 利用样本分析
- Cloudera Navigator介绍与安装
- [LeetCode]String主题系列{第5,6题}
- CDH内存调拨过度警告分析
- Ztorg:从 root 到 SMS
- [LeetCode]Math主题系列{第7,9,13,273题}
- 被忽视的攻击面:Python package 钓鱼
- [LeetCode]LinkedList主题系列{第2题}
- [LeetCode]HashTable主题系列{第3题}
- 如何使用Oozie API接口向Kerberos集群提交Java程序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【剑指Offer】复杂链表的复制
- 【剑指Offer】二叉树中和为某一值的路径
- 【剑指Offer】二叉搜索树的后序遍历序列
- 【剑指Offer】Ⅲ. 从上到下打印二叉树
- scRepertoire||单细胞免疫组库分析:R语言应用(二)
- 【剑指Offer】Ⅱ. 从上到下打印二叉树
- 【剑指Offer】I. 从上到下打印二叉树
- C#还能这么玩?“诺基亚大屏独显计算器”来咯!
- 【剑指Offer】栈的压入、弹出序列
- 【剑指Offer】包含min函数的栈
- 【剑指Offer】顺时针打印矩阵
- 从0打造属于自己的windows开发命令终端
- hadoop数据类型及自定义
- 惊!u202a错误,百分之九十都不知道的隐藏在文件路径里的惊天秘密!(干货收藏)
- 百度站点收录 - 什么叫自动推送