左端点左移一个单位。 代码如下 #include<bits/stdc++.h>usingnamespacestd;constintmaxm=2010;constintmaxn=1e6+10;intn,m,a[maxn],cnt[maxm];voidsolve(){scanf("%d%d",&n,&m);for(inti=1;i<=n;i++)scanf("%d",&a[i]);intlen=n+1,x,y;for(intl=1,r=1,now=0;;){while(r<=n...
【题解】P1638 逛画展-C++ 原题传送门 思路 这道题目可以通过尺取法来完成 (我才不管什么必须用队列) 什么是尺取法呢? 顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。 之所以需要掌握这个技巧,...
,记录长度最短的窗口端点。 代码 #include<bits/stdc++.h> usingnamespacestd; intn,m,d[1000010],now[2001]; intmain() { #ifndef ONLINE_JUDGE freopen("","r",stdin); #endif cin>>n>>m; for(inti=1;i<=n;++i){ cin>>d[i]; } intfront=1,rear=1,ans_X=1,ans_Y=1e7,cnt=0; wh...
洛谷P1638 逛画展 题解 尺取法/双指针/队列 题目链接:https://www.luogu.com.cn/problem/P1638 题目大意: 给你一个长度为 \(n (\le 10^6)\) 的数组,数组中每个元素的范围在 \(1\) 至 \(m\) 之间(\(1 \le m \le 2000\)), 求一个最短的连续子序列包含 \(1\) 到 \(...
洛谷P1638【逛画展】解题报告学习 2-12 2-pointer,扫一遍即可 int b[2010], a[1000010], n, m; int main() { ri cnt = 0, ar, al, ans = 1 << 30, l = 0, r = 0; read(n), read(m); rep(i, 1, n) read(a[i]); while(r <= n) { if(cnt == m) { if(r -...
Two pointers就是两个指针在序列上移动。(注意这里的指针不是C/C++中保存地址的指针变量,就是两个序列的下标,比如i,j,k) 我们取两个指针i, j,最开始都放在1位置。 这两个指针会夹住区间a[i,j]。我们现在可以通过移动这两个指针来表示任意一段区间。
P1638 逛画展 题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画。 wangjy想到博览馆去看这几位大师的作品。 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a 和 b)之间的所有图画,而门票 ...
P1638 逛画展(直尺法) 这道题是直尺法的模板题: #include<iostream>usingnamespacestd;constintmaxn = 1e6 +5;constintM = 2e3 +5;intn, m, a[maxn], vis[M];intmain(){ cin>> n >>m;for(inti =0; i < n; ++i)cin >>a[i];intst =0, en =0, num =0, res = n, l =1, ...
P1638 逛画展 (尺取法) P1638 逛画展 (尺取法) 传送门 思路:显然区间具有单调性,所以可以通过枚举区间左端点,让区间右端点不断增加,至于区间画的种类数,用一个数组记录区间的[l , r]的画的种类数,不断更新即可。 时间复杂度:O ( n ) O(n)O(n)...
P1638 逛画展(直尺法) 这道题是直尺法的模板题: #include<iostream>usingnamespacestd;constintmaxn = 1e6 +5;constintM = 2e3 +5;intn, m, a[maxn], vis[M];intmain(){ cin>> n >>m;for(inti =0; i < n; ++i)cin >>a[i];intst =0, en =0, num =0, res = n, l =1, ...