洛谷P2564 [SCOI2009]生日礼物(单调队列)

news/2025/2/26 4:32:48

传送门

 

准确的来说这个应该叫尺取法?

先对所有的点按$x$坐标进行排序

我们维护两个指针$l,r$,每一次令$r$不断右移直到所有颜色齐全,再不断右移$l$直到颜色数不足,那么此时$[l-1,r]$这个区间里的彩珠肯定能构成所有颜色,且不难发现不会有包含这一区间的方案比它更优

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #define inf 0x3f3f3f3f
 7 using namespace std;
 8 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 9 char buf[1<<21],*p1=buf,*p2=buf;
10 template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
11 inline int read(){
12     #define num ch-'0'
13     char ch;bool flag=0;int res;
14     while(!isdigit(ch=getc()))
15     (ch=='-')&&(flag=true);
16     for(res=num;isdigit(ch=getc());res=res*10+num);
17     (flag)&&(res=-res);
18     #undef num
19     return res;
20 }
21 const int N=1e6+5;
22 struct node{
23     int x,col;
24     inline bool operator <(const node &b)const
25     {return x<b.x;}
26 }a[N];
27 int cnt[105],tot,n,k,res=inf;
28 inline void add(int i){if(++cnt[a[i].col]==1) ++tot;}
29 inline void del(int i){if(--cnt[a[i].col]==0) --tot;}
30 int main(){
31 //    freopen("testdata.in","r",stdin);
32     n=read(),k=read();
33     for(int i=1;i<=k;++i){
34         int x=read();
35         for(int j=1;j<=x;++j) a[++tot].x=read(),a[tot].col=i;
36     }
37     tot=0,sort(a+1,a+1+n);
38     int l=1,r=0;
39     while(true){
40         while(tot<k&&r<n) add(++r);
41         if(r==n&&tot<k) break;
42         while(tot==k&&l<=r) del(l++);
43         cmin(res,a[r].x-a[l-1].x);
44     }
45     printf("%d\n",res);
46     return 0;
47 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9762232.html


http://www.niftyadmin.cn/n/1933743.html

相关文章

MySQL五大引擎之间的区别和优劣之分

MyISAM&#xff1a; 创建一个myisam存储引擎的表的时候回出现三个文件 1.tb_demo.frm&#xff0c;存储表定义&#xff1b; 2.tb_demo.MYD&#xff0c;存储数据&#xff1b; 3.tb_demo.MYI&#xff0c;存储索引。 MyISAM表无法处理事务&#xff0c;这就意味着有事务处理需求的…

物联网信息泄露又一例!家用智能设备还安全吗?

今年圣诞节&#xff0c;很多人在他们的树下或袜子里找到了全新的Wyze监控摄像头。但在为收到礼物而开心的同时&#xff0c;别忘了该公司在圣诞节为每个使用其产品的人带来了一个大麻烦。据证实&#xff0c;Wyze摄像头数据泄露事件确有发生&#xff0c;该事件可能在几周时间里暴…

Python(67)_写函数,判断用户传入的对象(str,列表,元组)的每一个元素是否有为空,并返回...

#-*-coding:utf-8-*-写函数&#xff0c;判断用户传入的对象(str&#xff0c;列表&#xff0c;元组)的每一个元素是否有为空&#xff0c;并返回def func(x):strif type(x) is str and x:for i in x:if i :return Trueelif x and type(x) is list or type(x) is tuple:for i in…

苏宁安全架构演进及实践

近年来&#xff0c;各类网络安全事件层出不穷&#xff0c;木马病毒、信息泄漏、网络诈骗等等字眼时常见诸媒体&#xff0c;就连年初美国的总统大选都被黑客闹得鸡飞狗跳&#xff0c;网络安全从未像今天这样受到整个社会的重视&#xff0c;那么对于绝大部分互联网企业尤其是电商…

JAVA静态代码块的作用

一 般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接…

后台服务器的测试

一、 from flask import Flask,Response,requestappFlask(__name__,static_folderstatic)app.route(/)def index():return var a"hellow"app.route(/allow,methods[get,post])def allow():headers{Access-Control-Allow-Origin:*,Access-Control-Allow-Content-Type:…

$ZOJ\ 2432\ Greatest\ Common\ Increasing\ Subsequence$

传送门 $Description$ 求两个序列的最长公共上升子序列 $Solution$ $f[i][j]$表示$a$序列匹配到$i$和$b$序列匹配到$j$的最长上升序列的长度&#xff0c;这里并不要求$a[i]b[j]$。 两层循环&#xff0c;外层$i1...n1$,内层$j1...n2$ 转移&#xff1a; $f[i][j]max(f[i-1][1...j…

玩转GO语言之文件读写操作

1.文件的打开,关闭//1.打开文件 fp, err : os.Open("/Users/yangtao/go_lesson/test.txt") if err ! nil {fmt.Println("打开失败") }else {fmt.Println("打开成功")fmt.Println(fp) }//2.关闭文件 defer func() {if err : fp.Close(); err ! ni…