sol:php
單調隊列 複雜度$O(n)$ios
板子題ide
/*In Search Of Life*/ #include<cstdio> #include<cstdlib> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<iomanip> #include<stack> #include<map> #include<set> #include<cmath> #define debug(x) cerr<<#x<<"="<<x<<endl #define INF 0x7f7f7f7f #define llINF 0x7fffffffffffll using namespace std; typedef pair<int,int> pii; typedef long long ll; inline int init() { int now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; } } inline long long llinit() { long long now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; } } int qa[1000005],qb[1000005],a[1000005]; int head=1,tail=0; int maxx[1000005],minx[1000005]; int main() { freopen("sound.in","r",stdin); freopen("sound.out","w",stdout); bool f=false; int n,m,c; n=init();m=init();c=init(); for(int i=1;i<=n;i++)a[i]=init(); for(int i=1;i<=n;i++) { while(tail>=head&&a[qa[tail]]>a[i]) { --tail; } qa[++tail]=i; while(head<=tail&&qa[tail]-qa[head]>=m) { ++head; } minx[i]=a[qa[head]]; } head=1,tail=0; for(int i=1;i<=n;i++) { while(tail>=head&&a[qb[tail]]<a[i]) { --tail; } qb[++tail]=i; while(head<=tail&&qb[tail]-qb[head]>=m) { ++head; } maxx[i]=a[qb[head]]; if(maxx[i]-minx[i]<=c&&i>=m) { printf("%d\n",i-m+1); f=1; } } if(!f)puts("NONE"); return 0; }