洛谷 P2032 扫描
https://www.luogu.org/problemnew/show/P2032
为啥不用STL,多方便。
定义一个大根堆,里边放一对数,这个数的大小和位置。
我们对于每次查询,判断首元素的位置是否在[i-k+1,i]这个范围内,不符合的话就弹出来。
代码好写。
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <queue> using namespace std; #define mp make_pair typedef pair <int,int> pill ; priority_queue <pill,vector<pill>,less<pill> > Q; int n,m,k,a[2000006]; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++) { Q.push(mp(a[i],i)); if(i>=k) { while(Q.top().second<=i-k)Q.pop(); printf("%d\n",Q.top().first); } } }
除特别注明外,本站所有文章均为Manjusaka丶梦寒原创,转载请注明来自出处