tjhdyhj @ 2021-08-25 21:43:21
#include <bits/stdc++.h>
using namespace std;
int main ()
{
long long N,n[2000006],M,min=1145140000000,minn=-1,i,j;
cin>>N>>M;
cin>>n[1];
cout<<"0"<<endl;
for (i=2;i<=N;i++)
{
cin>>n[i];
if (n[i-1]<min)
{
min=n[i-1];
minn=i-1;
}
if (minn<i-M)
{
min=1145140000000;
for (j=minn+1;j<=i-1;j++)
{
if (min>n[j])
{
min=n[j];
minn=j;
}
}
}
cout<<min<<endl;
}
}
by 冷月葬T魂 @ 2021-08-25 22:35:57
@tjhdyhj 话说建议输出一下min赋值后的值, min=1145140000000;
是否应该为min=1145140000000ll;
?(也许我在胡扯)
by tjhdyhj @ 2021-08-25 22:38:48
@冷月葬T魂 为什么最后要加“ll”呢?不懂,还有我现在是超时的问题,应该是代码优化的。(大佬%%%)
by 冷月葬T魂 @ 2021-08-25 22:43:58
@tjhdyhj 用Devc++实测,是我在胡扯。。。
认真看了一下想明白了
以下数据您就超时了:
1 2 3 ... 2000000
for (j=minn+1;j<=i-1;j++)
{
if (min>n[j])
{
min=n[j];
minn=j;
}
}
这段代码每次都要整蛊上O(m)遍,自然超时
by tjhdyhj @ 2021-08-25 22:51:53
@冷月葬T魂 啊这我放弃了(线段树看不懂的屑)(还是要谢谢巨佬%%%)
by 冷月葬T魂 @ 2021-08-25 22:56:03
@tjhdyhj (不用谢)别放弃啊,不是用单调队列吗
by tjhdyhj @ 2021-08-25 22:59:16
@冷月葬T魂 单调队列也不会回来我参考题解自学一下吧
by hy233 @ 2021-09-22 21:49:04
输入输出要优化(快读或scanf/printf)
by Kagamino_Natsumi @ 2021-09-29 14:44:01
这题千万不要用cout,会T飞
by Kamisugi @ 2021-11-11 16:07:26
cout会T,用printf
by Gkcc918 @ 2022-02-26 21:11:22
@hy233 感谢感谢我就用的cout