题意:
百度。
思路:
一个连续数组111222233344444555666的每一个起伏转折即需要一张万能牌。
然后二分一下得最长区间。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<map>using namespace std;typedef long long LL;const LL mod=1e9+7;const int N=1e5+10;int b[N];bool vis[N];int num;int Search(int left,int right){ int L=left; while(left<right) { int mid=left+(right-left+1)/2; if(b[mid]-b[L]<=num) left=mid; else right=mid-1; } return left;}int main(){ int T; scanf("%d",&T); while(T--) { int n,m,x; scanf("%d%d",&n,&m); memset(vis,0,sizeof(vis)); num=0; for(int i=0;i<n;i++) { scanf("%d",&x); if(x==0) num++; else vis[x]=1; } b[0]=0; for(int i=1;i<=m;i++) { if(vis[i]) b[i]=b[i-1]; else b[i]=b[i-1]+1; } int res=0; for(int i=0;i<=m;i++) res=max(Search(i,m)-i,res); PRintf("%d/n",res); } return 0;}
新闻热点
疑难解答