求助:只过了%15
#include<bits/stdc++.h> #define MAXN 200010 using namespace std; set<int> st; int n,m; int c[MAXN],pre[MAXN],b[MAXN]; void solve1(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>c[i],b[n-i+1]=c[i]; } bool solve2(int a[]){ for(int i=1;i<=n;i++) if(a[i]>a[i-1])pre[i]=pre[i-1]+1; else pre[i]=1; for(int i=n;i>=m;i--)st.emplace(a[i]); for(int i=m;i<=n;i++){ st.erase(a[i]); if(i-m>0)st.emplace(a[i-m]); if(st.size()<n-m)return false; if(pre[i]<m)continue; auto it=st.upper_bound(a[i]); if(it==st.begin())return true; it--; if(*it<a[i-m+1])return true;} return false; } int main(){ int t; cin>>t; while(t--){ solve1(); if(solve2(c)||solve2(b))printf("YES\n"); else printf("NO\n"); } return 0; }
这样做为啥不对呀qwq