lethe_u @ 2022-08-27 21:39:51
#include<bits/stdc++.h>
using namespace std;int n,m;int a[2000010],dp[2000010];
inline int read(){
int x=0,f=1;
char ch;
ch=getchar();
if(ch<'0'||ch>'9')if(ch=='-')f=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline void p(int x){
if(x>9)p(x/10);
putchar(x%10+'0');
}
int main(){
n=read();m=read();
int head=1,tail=0;
p(0);cout<<'\n';
for(int i=1;i<=n;i++){
a[i]=read();
while(head<=tail&&i-dp[head]>=m)head++;
while(head<=tail&&a[dp[tail]]>=a[i])tail--;
tail++;
dp[tail]=i;
if(i!=n)p(a[dp[head]]),cout<<'\n';
}
}
by myyyIisq2R @ 2022-08-27 21:41:23
快读很玄学。
by 654179_qwq @ 2022-08-27 21:45:00
逝不逝你的快读模板有问题?
inline long long rd(){
long long x=0;bool ntv=false;char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();//这句少了?
if(c=='-')ntv=true;else x=(c^48);c=getchar();
while(c>='0'&&c<='9'){x=x*10+(c^48);c=getchar();}
return ntv?-x:x;
}
by myyyIisq2R @ 2022-08-27 21:45:12
@lethe_u 快读这样写。
int read()
{
int x = 0, w = 1;
char ch = 0;
while (ch < '0' || ch > '9') // ch 不是数字时
{
if (ch == '-')
w = -1; // 判断是否为负
ch = getchar(); // 继续读入
}
while (ch >= '0' && ch <= '9') // ch 是数字时
{
x = x * 10 + (ch - '0'); // 将新读入的数字’加’在 x 的后面
// x 是 int 类型,char 类型的 ch 和 ’0’ 会被自动转为其对应的
// ASCII 码,相当于将 ch 转化为对应数字
// 此处也可以使用 (x<<3)+(x<<1) 的写法来代替 x*10
ch = getchar(); // 继续读入
}
return x * w; // 数字 * 正负号 = 实际数值
}
by Haber @ 2022-08-27 21:50:03
反正 cin + 关同步 + cin.tie(0) = 80Pts.
by Haber @ 2022-08-27 21:50:22
当然是TLE
by 654179_qwq @ 2022-08-27 21:56:52
awa
by ForMyDream @ 2022-08-27 22:05:21
@lethe_u 您的快读这一句锅了
if(ch<'0'||ch>'9')if(ch=='-')f=-1,ch=getchar();
应改成
if(ch<'0'||ch>'9')if(ch=='-')f=-1;ch=getchar();
by CH_mengxiang @ 2022-08-28 12:08:34
@ForMyDream 你这样写也不行,两个句子要打大括号,打大括号后就好了
by ForMyDream @ 2022-08-28 12:40:34
@PRC_Dreamwastaken 是的,(我不习惯压行所以出锅了)
by lethe_u @ 2022-08-28 18:52:22
@ForMyDream 谢谢,ac了