首页 > 其他分享 >[题解]P1311 [NOIP2011 提高组] 选择客栈

[题解]P1311 [NOIP2011 提高组] 选择客栈

时间:2024-10-17 16:23:29浏览次数:7  
标签:NOIP2011 int 题解 客栈 pos long mp P1311 define

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]\)进行二分,得到的答案一定是单调的,所以放弃二分,直接动态维护每个当前颜色的答案即可。

点击查看代码
#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; 
}

标签:NOIP2011,int,题解,客栈,pos,long,mp,P1311,define
From: https://www.cnblogs.com/Sinktank/p/18472483

相关文章

  • 【题解】twt studio2024 萌新欢乐赛
    迟来的题解本文更新到个人主页中,后续如果有任何修正变动也只会在网页端更新~特别鸣谢小羽毛在羽猫球一题的题解:)感谢兴航学弟在T3的题解。比赛链接:https://www.luogu.com.cn/contest/196515T1签到题,所有参与选手均满分。略。T2https://www.luogu.com.cn/article/37n1idam......
  • P9731 [CEOI2023] Balance 题解
    首先考虑\(S=2\)怎么做,我们把它转化为图论问题。对于每一行的两个点的颜色连一条无向边,那我们相当于要给这些边定向。最后要求\(|in_u-out_u|\le1\)。会发现这个要求很像欧拉回路。但是欧拉回路是要求每个点的入度和出度相等,怎么办呢?我们再建一个超级源点,向每个奇数度数的点......
  • 常见ElasticSearch 面试题解析(上)
    前言ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,......
  • 2024-10-17每日一题题解
    最大子段和题目描述给出一个长度为\(n\)的序列\(a\),选出其中连续且非空的一段使得这段和最大。样例输入72-43-12-43样例输出4题解tips:无脑暴力法:枚举每一段区间,再对每一段区间求和,时间复杂度为\(O(n^3)\),会超时(n为1e5,则应该在\(O(nlogn)\)的时间范围内)......
  • 【题解】【记忆化递归】——Function
    【题解】【记忆化递归】——FunctionFunction题目描述输入格式输出格式输入输出样例输入#1输出#1提示数据规模与约定1.思路解析2.AC代码Function通往洛谷的传送门题目描述对于一个递归函数w......
  • PTA L1系列题解(C语言)(L1_073 -- L1_080)
    L1-073人与神题目内容:L1-073人与神-团体程序设计天梯赛-练习集(pintia.cn)跨界大神L.PeterDeutsch有一句名言:“Toiterateishuman,torecursedivine.”(迭代的是人,递归的是神)。本题就请你直接在屏幕上输出这句话。输入格式:本题没有输入。输出格式:在一行中输......
  • HIAST Collegiate Programming Contest 2024(非完全题解)
    C题HZY做的,等他补题解//#pragmaGCCoptimize("O3,unroll-loops")//#pragmaGCCtarget("avx2,bmi,bmi2,lzcnt,popcnt")////如果在不支持avx2的平台上将avx2换成avx或SSE之一#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecon......
  • HNCPC2024 2024湖南省赛 题解
    目录写在前面I签到C签到E二进制,枚举,子集DPK转化,分层图最短路A枚举,DP,简单计算几何J单调性,枚举,数据结构HDP,字符串,KMPD莫比乌斯反演,枚举写在最后写在前面比赛地址:https://codeforces.com/gym/105423。以下按个人难度向排序。利益相关:现场赛Au。没有和去年一样整场犯唐......
  • [题解]NOIP2018模拟赛 plutotree
    题目描述给定一棵有\(n\)个节点的树,根节点为\(1\),节点\(i\)有权值\(w[i]\)。这棵树非常奇怪,它的每个叶子结点都有一条连向根节点的权值为\(0\)的边。给定\(q\)次询问,每次给定\(u,v\),请计算出一条\(u\)到\(v\)的路径(每条边最多经过\(1\)次),最小化该路径上的点权之和,并在其基础上最......
  • P10353 [PA2024] Grupa permutacji 题解
    神秘!在这些排列生成的置换群\(G\)里,若\(\exists\pi\inG\)使得\(\pi_i=k,\pi_j=l\),则所有这些\((k,l)\)被同样数量的\(\pi\inG\)通过前述方法得出。证明:设\(\pi(i,j)=(k,l),\pi'(i,j)=(k',l')\)(意义前述),则\(\pi^{-1}\circ\pi'(k,l)=(k',l')......