Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
142723 黄恩宁 密钥 C++ 通过 100 10 MS 612 KB 819 2024-04-09 00:41:10

Tests(10/10):


#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int MN=9e4+10; int n,m; int a[MN]; int q[MN];//记录元素在a中的位置,a[q[i]]是单调递减队列 int h,t;//单调队列的head,tail指针 int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); h=1; t=0; for(int i=1;i<=m;i++) { while (h<=t && a[i]>a[q[t]]) t--; q[++t]=i; } cout<<a[q[h]]; for(int i=m+1;i<=n;i++) { if(i-q[h]>=m) h++; //控制队列的长度,如果单调队列中队首元素在a中和需要新进窗口的第i个元素的位置超过窗口长度 //队首出队 while((h<=t)&&(a[i]>a[q[t]])) t--;//筛选队列中的元素 t++; q[t]=i;//新元素入队 cout<<a[q[h]]; } return 0; }


测评信息: