[SCOI2009]生日礼物

news/2024/7/5 2:23:12

这道题很容易看出是一道单调队列题。

首先我们根据珠子的位置排序。

然后按顺序枚举一个个珠子。

如果该种珠子没有出现过标记上它的位置,如果出现过修改并打上当前位置。当所有珠子都出现后,将当前位置减去打标记位置最小的一个即为当前解。

可以证明正确性。

显然选择珠子越靠后越好。

最小位置的查找要$O(K)$,所以复杂度为$O(NK)$。

这道题$K$比较小,该复杂度能过。但当$K$较大时会超时。

我们充分运用单调队列的性质,牺牲空间换取时间。

具体做法就是开一个数组记录第$i$个珠子是否在标记中,然后用一个指针$P$记录位置最小的珠子。

珠子只会从前往后打上标记,所以当取消珠子的标记时,根据需要向后移动$P$指针直到再一次指向位置最小的珠子即可。

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 #define re register
 6 #define rep(i, a, b) for (re int i = a; i <= b; ++i)
 7 #define repd(i, a, b) for (re int i = a; i >= b; --i)
 8 #define maxx(a, b) a = max(a, b);
 9 #define minn(a, b) a = min(a, b);
10 #define LL long long
11 #define inf (1 << 30)
12 
13 inline int read() {
14     int w = 0, f = 1; char c = getchar();
15     while (!isdigit(c)) f = c == '-' ? -1 : f, c = getchar();
16     while (isdigit(c)) w = (w << 3) + (w << 1) + (c ^ '0'), c = getchar();
17     return w * f;
18 }
19 
20 const int maxn = 1e6 + 5, maxk = 60 + 5;
21 
22 struct Ball {
23     int k, p;
24 } A[maxn];
25 bool cmp(Ball a, Ball b) {
26     return a.p < b.p;
27 }
28 
29 int loc[maxk], N, K, tag[maxn];
30 
31 int main() {
32     N = read(), K = read();
33 
34     int P = 0;
35     rep(i, 1, K) {
36         int T = read();
37         rep(x, 1, T) A[++P] = (Ball){i, read()};
38     }
39     sort(A+1, A+N+1, cmp);
40     P = 0;
41     int cnt = 0, ans = (1<<31)-1;
42     memset(tag, 0, sizeof(tag));
43     rep(i, 1, N) {
44         tag[loc[A[i].k]] = 0;
45         if (!loc[A[i].k]) cnt++;
46         loc[A[i].k] = i;
47         tag[loc[A[i].k]] = 1;
48         while (!tag[P]) P++;
49         if (cnt == K) minn(ans, A[i].p - A[P].p);
50     }
51     printf("%d", ans);
52     return 0;
53 }

 

转载于:https://www.cnblogs.com/ac-evil/p/10350916.html


http://lihuaxi.xjx100.cn/news/235416.html

相关文章

activity的四种加载模式

在android里&#xff0c;有4种activity的启动模式&#xff0c;分别为&#xff1a; standard, singleTop, singleTask和singleInstance, 其中standard和singleTop类似&#xff0c; singleTask和singleInstance类似&#xff0c; 用法如下&#xff1a; (1).standard和singleTop 这…

UIWebView、WKWebView使用详解及性能分析

一、整体介绍 UIWebView自iOS2就有&#xff0c;WKWebView从iOS8才有&#xff0c;毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存&#xff0c;且内存峰值更是夸张。WKWebView网页加载速度也有提升&#xff0c;但是并不像内存那样提…

数据库服务器 之 PostgreSQL数据库的日常维护工作

来自&#xff1a;LinuxSir.Org摘要&#xff1a;为了保持所安装的 PostgreSQL 服务器平稳运行, 我们必须做一些日常性的维护工作。我们在这里讨论的这些工作都是经常重复的事情&#xff0c; 可以很容易地使用标准的 Unix 工具&#xff0c;比如cron 脚本来实现; 目录1. 综述&…

WKWebView 的使用简介

1. navigationDelegate [objc] view plaincopy print?- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { // 类似UIWebView的 -webViewDidStartLoad: NSLog("didStartProvisionalNavigation"); [UIAppli…

Codeforces Educational round 58

Ediv2 58 随手AK.jpgD 裸的虚树&#xff0c;在这里就不写了 E 傻逼贪心&#xff1f;这个题过的比$B$都多.jpg #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <cstdlib> #include <queue> #includ…

基于Idea从零搭建一个最简单的vue项目

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime)&#xff0c;发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化&#xff0c;提供替代的API&#xff0c;使得V8在非浏览器环境…

高德地图POI搜索,附近地图搜索,类似附近的人搜索

效果图&#xff1a; 首先导入道德地图的SDK&#xff0c;导入步骤不在这里介绍 2&#xff1a;包含头文件&#xff1a; [objc] view plaincopy #import <AMapSearchKit/AMapSearchAPI.h> 3&#xff1a;代码 [javascript] view plaincopy property(nonatomic,strong)AMap…

20位程序员关于求职的疑问,以及我给出的参考答案

作者&#xff1a;陆小凤首发&#xff1a;公众号【程序员江湖】阅读本文大概需要 6 分钟。前几天发了一条朋友圈对于求职小伙伴们提出的问题&#xff0c;我进行了收集整理&#xff0c;统一反馈。也许这20个问题也是你们遇到的问题&#xff0c;所以趁着年前赶紧把它发出来。以下2…