题意简述

彩珠有 \(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;
}

[Tkey] 生日礼物的更多相关文章

  1. .net源码分析 – Dictionary<TKey, TValue>

    接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blo ...

  2. .net源码分析 - ConcurrentDictionary<TKey, TValue>

    List源码分析 Dictionary源码分析 ConcurrentDictionary源码分析 继上篇Dictionary源码分析,上篇讲过的在这里不会再重复 ConcurrentDictionar ...

  3. C# KeyValuePair<TKey,TValue>的用法-转载

    C# KeyValuePair<TKey,TValue>的用法.结构体,定义可设置或检索的键/值对.也就是说我们可以通过 它记录一个键/值对这样的值.比如我们想定义一个ID(int类型)和 ...

  4. .NET中Dictionary<TKey, TValue>浅析

    .NET中Dictionary<TKey, Tvalue>是非常常用的key-value的数据结构,也就是其实就是传说中的哈希表..NET中还有一个叫做Hashtable的类型,两个类型都 ...

  5. .net学习笔记----有序集合SortedList、SortedList<TKey,TValue>、SortedDictionary<TKey,TValue>

    无论是常用的List<T>.Hashtable还是ListDictionary<TKey,TValue>,在保存值的时候都是无序的,而今天要介绍的集合类SortedList和S ...

  6. IDictionary<TKey, TValue> vs. IDictionary

    Enumerating directly over an IDictionary<TKey,TValue>returns a sequence of  KeyValuePair struc ...

  7. Dictionary<TKey, TValue> 类

    C# Dictionary<TKey, TValue> 类 Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及 ...

  8. 线程安全集合 ConcurrentDictionary<TKey, TValue> 类

    ConcurrentDictionary<TKey, TValue> 类 [表示可由多个线程同时访问的键/值对的线程安全集合.] 支持 .NET Framework 4.0 及以上. 示例 ...

  9. wp7 BaseDictionary<TKey, TValue>

    /// <summary>/// Represents a dictionary mapping keys to values./// </summary>/// /// &l ...

  10. C# 字典 Dictionary<Tkey,Tvalue>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...

随机推荐

  1. manim边学边做--Table

    表格是一种常见的数据展示形式,manim提供了Table模块专门用于显示表格形式的数据.表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,不过,Table的表现力更强,比如,它可以显 ...

  2. python运行报警告:Cython directive 'language_level' not set, using '3str' for now (Py3)

    相关: https://stackoverflow.com/questions/34603628/how-to-specify-python-3-source-in-cythons-setup-py ...

  3. "基础模型时代的机器人技术" —— Robotics in the Era of Foundation Models

    翻译: 2023年是智能机器人规模化的重要一年!对于机器人领域之外的人来说,要传达事物变化的速度和程度是有些棘手的.与仅仅12个月前的情况相比,如今人工智能+机器人领域的大部分景观似乎完全不可识别.从 ...

  4. js 实现俄罗斯方块(三)

    我又来啦!上一篇有点水,本篇我们来干货! 嘿嘿,首先我们先搭建游戏世界------网格 所有的操作包括左移右移下移旋转都是在这个网格中 既然是使用js来写当然跑不了html啦,实现网格最简单的 方法就 ...

  5. 告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验

    告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验 Huggingface国内开源镜像:https://hf-mirror.com/ 里面总结了很多下载的方法,下面进行一一讲 ...

  6. 基础数据结构->set&&map

    set&&map BEGIN:惜墨如金 set用法 基本用法 #include<bits/stdc++.h> using namespace std; void the_s ...

  7. LeetCode40.组合总和II

    LeetCode40.组合总和II 力扣题目链接(opens new window) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...

  8. mybatis打印sql 转

    我们在使用mybatis开发过程中,经常需要打印sql以及输入输出,下面说一下mybatis结合log4j打印sql的. 1.添加mybatis配置 mybatis的日志打印方式比较多,SLF4J | ...

  9. shell编程入门-适合小白

    一.变量的使用 1. 变量命名 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="yikoulinux" 注意,变量名和等号之间不能有空格,这 ...

  10. 零基础学习人工智能—Python—Pytorch学习(七)

    前言 本文主要讲神经网络的下半部分. 其实就是结合之前学习的全部内容,进行一次神经网络的训练. 神经网络 下面是使用MNIST数据集进行的手写数字识别的神经网络训练和使用. MNIST 数据集,是一个 ...