richardchen @ 2017-11-08 23:25:34
#include<cstdio>
#include<algorithm>
#define M 2000005
#define ENDL putchar('\n');
using namespace std;
int n,m,tree[M<<2],size=1;
void Build(int tmp)
{
while(size<tmp+2) size<<=1;
for(int i=size+1;i<=size+tmp;i++) scanf("%d",&tree[i]);
for(int i=size-1;i>0;i--) tree[i]=min(tree[i<<1],tree[i<<1|1]);
}
int query(int l,int r)
{
int ret=0x7fffffff;
for(l=l+size-1,r=r+size+1;l^r^1;l>>=1,r>>=1)
{
if(~l&1) ret=min(ret,tree[l^1]);
if(r&1) ret=min(ret,tree[r^1]);
}
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
Build(n);
putchar('0');putchar('\n');
for(int i=2;i<=n;i++) printf("%d",query(max(1,i-m),i-1)),putchar('\n');
return 0;
}
本来AC,在开头写上%:pragma optimize("o3").或#pragma GCC optimize(3)后TLE两个点(#2,#10),而且开O2都不会AC了,求dalao解释。。。
by Hades18 @ 2017-11-09 07:19:01
1.洛谷机子不支持手动开O2,O3,想开的可以上大牛分站。
2.你的代码可能卡在时限附近,由于评测机波动T了
3.O2的优化可能会将你的一些源码优化成莫名其妙(AC->WA)
by 微雨燕双飞 @ 2018-02-24 16:06:37
哇,真是大佬,zkw线段树蒟蒻现在都没学会