网站建设及推广人员,国家信用信息公示系统陕西,网站色彩搭配案例,亚洲建行网站打不开VJ地址
题意#xff1a;选择一段or两段连续的区间#xff0c;合成一段序列#xff0c;使得选择的序列中没有相同的数字#xff0c;求序列最长的长度
思路#xff1a;由于是区间内不能有相同的数字#xff0c;所以考虑用尺取#xff0c;可以2*n的时间枚举第一段的长度选择一段or两段连续的区间合成一段序列使得选择的序列中没有相同的数字求序列最长的长度
思路由于是区间内不能有相同的数字所以考虑用尺取可以2*n的时间枚举第一段的长度然后剩下两边的区间同样用尺取找到能选择的最大值然后相加做法挺暴力不过数据小啊。
#includebits/stdc.h
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt1
#define rson rt1|1
#define lowbit(a) ((a)-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i0;(i)(n);i)
#define rep1(i,n) for(int i1;(i)(n);i)
#define se secondusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairint,int pii;
int dx[4] {-1,1,0,0},dy[4] {0,0,1,-1};
const ll mod1e97;
const ll N 2e610;
const double eps 1e-4;
const double piacos(-1);
ll gcd(int a,int b){return !b?a:gcd(b,a%b);}
int vis[N];
int cc;
int n;
int a[N];
int work(int L,int R){if(LR) return 0;int lL,rL;int ans0;while(rR||lR){while(!vis[a[r]]rR){vis[a[r]];ansmax(ans,r-l);}if(lrvis[a[r]]) vis[a[r]];vis[a[l]]--;l;ansmax(ans,r-l);}return ans;
}
int main()
{iosint t;cint;while(t--){FILL(vis,0);cinn;rep1(i,n){cina[i];}int L1,R1;int ans0;while(Rn){while(!vis[a[R]]Rn){vis[a[R]];ansmax(ans,R-Lmax(work(1,L-1),work(R,n)));}vis[a[L]]--;L;ansmax(ans,R-Lmax(work(1,L-1),work(R,n)));}printf(Case #%d: %d\n,cc,ans);}return 0;
}