首页 > 其他分享 >[Tkey] 生日礼物

[Tkey] 生日礼物

时间:2024-06-09 17:34:02浏览次数:17  
标签:int 生日礼物 坐标 答案 区间 Tkey

题意简述

彩珠有 \(n\) 个 \(k\) 种,每个珠子都有一个坐标 \(p_{i}\),求最小的区间长度,使得这个区间包含全部的 \(k\) 种彩珠.

分析

发现我们可以维护每一种颜色的最近出现坐标.

因为是最近的出现坐标,所以离现在的距离(即答案)一定是更优的,那么我们用这个值来更新答案一定就是最优的.

假如我们想要让当前值更新答案,那么我们就需要让全部的颜色都在区间里出现过,也就是去寻找全部颜色的出现坐标的最小值,然后用当前坐标去减就行了.

突然发现能用线段树建在 \(k\) 上来搞这东西,而且它的查询是O(1)的,简直是太快了,膜拜了.

然后就秒了.

#include<bits/stdc++.h>
using namespace std;
int n,k;
struct node{
	int id,color;
	bool operator <(const node &A)const{
		return id<A.id;
	}
}a[1000001];
struct tree{
	int l,r;
	int min;
}t[241];
#define tol (id*2)
#define tor (id*2+1)
#define mid(l,r) mid=((l)+(r))/2
void build(int id,int l,int r){
	t[id].l=l;t[id].r=r;t[id].min=-1;
	if(l==r){
		return;
	}
	int mid(l,r);
	build(tol,l,mid);
	build(tor,mid+1,r);
}
void change(int id,int p,int val){
	if(t[id].l==t[id].r){
		t[id].min=val;return;
	}
	if(p<=t[tol].r) change(tol,p,val);
	else change(tor,p,val);
	t[id].min=min(t[tol].min,t[tor].min);
}
int ask(){
	return t[1].min;
}
int main(){
	int cnt=0;
	ios::sync_with_stdio(false);
	cin>>n>>k;int x,y;
	for(int i=1;i<=k;++i){
		cin>>x;
		while(x--){
			cin>>y;
			a[++cnt]={y,i};
		}
	}
	build(1,1,k);
	sort(a+1,a+n+1);int ans=0x7fffffff;
	for(int i=1;i<=n;++i){
//		cout<<i<<" color : "<<a[i].color<<" id: "<<a[i].id<<endl;
		change(1,a[i].color,a[i].id);
		if(ask()!=-1){
//			cout<<"can "<<ask()<<" "<<a[i].id-ask()<<endl;
			ans=min(ans,a[i].id-ask());
		}
	}
	cout<<ans;
}

标签:int,生日礼物,坐标,答案,区间,Tkey
From: https://www.cnblogs.com/HaneDaCafe/p/18239801

相关文章

  • [Tkey] CodeForces 1267G Game Relics
    太神了这题,膜拜出题人orz。思考一首先是大家都提到的一点,先抽卡再买。这里来做个数学分析。假设我们还剩\(k\)种没有买,其实我们是有式子来算出它的花费期望的。WIKI上提到,假设一个事件的概率为\(p\),则遇到它的期望为\(\frac{1}{p}\),因此,对于这个题,抽到一个新物品的概率显......
  • 翻译《The Old New Thing》- Hotkeys involving the Windows logo key are reserved b
    HotkeysinvolvingtheWindowslogokeyarereservedbythesystem-TheOldNewThing(microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071130-00/?p=24333RaymondChen 2007年11月30日Windows徽标键的热键由系统保留        系统保留了......
  • c# Dictionary<TKey,TValue>.TryAdd
    原文链接:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/code-analysis/quality-rules/ca1864Dictionary<TKey,TValue>.ContainsKey(TKey) 和 Dictionary<TKey,TValue>.Add 都执行查找操作,这是冗余设置。如果字典中已存在键,Dictionary<TKey,TValue>.Add 也会引发异......
  • autohotkey的使用心得, 和最近写的点击屏幕三次自动算夹角的工具.
    https://github.com/zhangbo2008/arc_tools_by_click_mouse_three_times autohotkey如何debug: vscode里面安装上,autohotkeypuls即可. 然后直接运行我们写的1.ahk,他就会自动找autohotkey.exe的程序来debug了. autohotkey的赋值写法: 传统方法 使用百分号括住变量名......
  • 微信公众号开发 - 扫描带参数二维码事件支持EventKey字符串传参
    $access_token=$this->access_token();//获取access_token$json_url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$access_token;$scene_id="A123B";$curl_data='{"action_name&......
  • QHotkey
    1.下载https://github.com/Skycoder42/QHotkey2.使用1#include<QHotkey>2#include<QApplication>3#include<QDebug>45intmain(intargc,char*argv[])6{7QApplicationapp(argc,argv);89QHotkeyhotkey(QKeySequ......
  • Angular Material 17+ 高级教程 – CDK Accessibility の ListKeyManager
       目录上一篇 AngularMaterial17+高级教程–CDKAccessibilityのFocus下一篇TODO想查看目录,请移步 Angular17+高级教程–目录......
  • 如何备份已经安装并设置AutoHotkey脚本编程环境的Windows电脑系统分区 2024.01.22
     如何备份已经安装并设置AutoHotkey脚本编程环境的Windows电脑系统分区2024.01.22第1步:邮购并制作银灿IS903可启动U盘,量产Emulation-CD-ROM所用ISO镜像选用从www.firpe.cn下载的PE光盘镜像。第2步:正确安装电脑软件并调整电脑各项设置备份硬盘分区表和启动扇区信息转移个......
  • 通过 KernelUtil.dll 劫持 QQ / TIM 客户端 QQClientkey / QQKey 详细教程(附源码)
    前言由于QQ9.7.20版本后已经不能通过模拟网页快捷登录来截取QQClientkey/QQKey,估计是针对访问的程序做了限制,然而经过多方面测试,诸多的地区、环境、机器也针对这种获取方法做了相应的措施,导致模拟网页快捷登录来截取数据被彻底的和谐,为了解决这个问题我们只能更改思路对......
  • 通过腾讯网页快捷登录协议截取 QQ邮箱 的 QQClientkey / QQKey 教程
    最近发现之前的老代码已经不能获取QQ邮箱的Clientkey,经过一番调试后发现QQ邮箱更新了获取的流程,所以决定重新发布一篇文章,废话不多,直接上教程,喜欢的朋友记得点赞加关注。step1首先需要获取到Qrsig的值(流程已更改)RequestURL:https://ssl.ptlogin2.qq.com/ptqrshow?appid......