给定一个数组,找出最长的子序列,满足

a,a,..a,b,b,..b,a,a,..a
前面的a和后面的a都要是x个,中间的b是y个。
其中,x>=0且y>=0.

\(\color{Red}{---------------------华丽分割线w(゚Д゚)w------------------------}\)

看到这数据,就觉得暴力无疑。

\(三种情况\)

\(Ⅰ.当x=0,也就是只有中间部分,答案就是出现次数最多的那个数字。\)

\(Ⅱ.当y=0,也就是只有两边的部分,那就要枚举前半部分区间和后半部分区间,设区间为[1,L]和[R,n]\)

\(再枚举a的取值(1-26),答案是区间[1,L]a出现次数和[R,n]a出现次数的较小值\)。

\(Ⅲ.当x和y都不为0,怎么办?其实和2差不多,只不过现在因为y的存在,在区间[L,R]要计算最大的y,也就是出现次数最多的。\)

具体实现,需要维护几个数组降低复杂度,具体看代码。

暴力代码

\(但是上面的方法对于这题的hard版本n=2e5实在不够看,所以有了下面的方法。\)

\(\color{Orange}{---------------------O(∩_∩)O分割分割分割------------------------}\)

这种数据,枚举区间的办法是行不通了,只有\(a[i]<=200\&\&a[i]>=1\)这个范围还算友好

我们可以枚举数字作为a。

比如3出现了5次,可行的枚举就是左右各一次,左右各两次。

在这个基础上,要使空出来的区间最大(因为可能要放b),显然应该选最左边的几个和最右边的几个。

\(那我们开个vector装每个数字出现的位置,枚举就是了。\)

\(那空出来的区间呢?如何快速知道哪个数在区间次数最多作为b?\)

\(其实在枚举的过程中,空出来的区间总是连续减少的,所以可以动态维护1-200的出现次数\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+9;
vector<int>vec[209];
int a[maxn],t,n,vis[201];
int main()
{
cin>>t;
while(t--)
{
for(int i=1;i<=200;i++) vec[i].clear();
cin>>n;
int ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
vec[a[i]].push_back(i);
}
//处理x为0
for(int i=1;i<=200;i++)
{
int tt=vec[i].size();
ans=max(ans,tt);
}
//处理两头夹中间
for(int i=1;i<=200;i++)
{
int k=vec[i].size(),temp=0;
if(k<2) continue;
memset(vis,0,sizeof(vis));
int l=vec[i][0]+1,r=vec[i][k-1]-1;
for(int j=l;j<=r;j++) vis[a[j]]++;//预处理拿1个的时候
for(int j=1;j<=200;j++) temp=max(temp,vis[a[j]]);
ans=max(ans,2+temp);
for(int j=2;j<=k/2;j++)//左边拿j,右边拿j
{
int l=vec[i][j-1]+1,r=vec[i][k-j]-1;
for(int q=vec[i][j-2]+1;q<l;q++) vis[a[q]]--;
for(int q=r+1;q<=vec[i][k-j+1]-1;q++) vis[a[q]]--;
temp=0;
for(int q=1;q<=200;q++)
ans=max(ans,vis[q]+j*2);
}
}
cout<<ans<<endl;
}
}

Three Blocks Palindrome (easy version)[暴力-预处理]的更多相关文章

  1. Codeforces Global Round 7 D1. Prefix-Suffix Palindrome (Easy version)(字符串)

    题意: 取一字符串不相交的前缀和后缀(可为空)构成最长回文串. 思路: 先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀. #include <bits/stdc++.h> ...

  2. Into Blocks (easy version)

    G1 - Into Blocks (easy version) 参考:Codeforces Round #584 - Dasha Code Championship - Elimination Rou ...

  3. Codeforces Round #540 (Div. 3) F1. Tree Cutting (Easy Version) 【DFS】

    任意门:http://codeforces.com/contest/1118/problem/F1 F1. Tree Cutting (Easy Version) time limit per tes ...

  4. Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)

    F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...

  5. CF1225B1 TV Subscriptions (Easy Version)

    CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...

  6. D1. Kirk and a Binary String (easy version)

    D1. Kirk and a Binary String (easy version) 01串找最长不降子序列 给定字符串s,要求生成一个等长字符串t,使得任意l到r位置的最长不降子序列长度一致 从后 ...

  7. Numerical Sequence (easy version)

    http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...

  8. Ping-Pong (Easy Version)(DFS)

    B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. ZOJ 3868 - Earthstone: Easy Version

    3868 - Earthstone: Easy Version Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld ...

随机推荐

  1. 微信小程序页面通信

    目录 微信小程序页面通信 方式一:通过URL 方式二:通过全局变量 方式三:通过本地存储 方式四:通过路由栈 微信小程序页面通信 方式一:通过URL // A 页面 wx.navigateTo({ u ...

  2. AJ学IOS(12)UI之UITableView学习(上)LOL英雄联盟练习

    AJ分享,必须精品 先看效果图 源代码 NYViewController的代码 #import "NYViewController.h" #import "NYHero. ...

  3. Python 编程环境搭建(Windows 系统中)

    由于大家普遍使用 Windows 系统,所以本文只介绍 Windows 系统中 Python 环境的安装. 在 Windows 中安装 Python 与安装普通软件没什么差别,下载所需版本的安装包后, ...

  4. 用python画出全球疫情趋势变化图

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  5. BUG 测试计划

       性能追求 目前状况 测试标准 APP平稳运行,无crush现象   快速下拉翻页时,崩溃退出     要求多人使用,均流畅无异常退出方可               页面的放大缩小不会造成页面显 ...

  6. stand up meeting 12/18/2015 ~12/20/2015(weekend)

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云    完成主页面设计和非功能性PDF reader UI设计实现 ...

  7. echarts使用笔记

    1.解决列文字隔开问题,及文字太长问题解决. yAxis: [ { type : 'category', data : message.data[0].dataone, axisLabel: { in ...

  8. 参数化parameterized

    pip install parameterized 注意:之前的nose-parameterized已经更新为parameterized库了 模块下测试方法直接使用parameterized impo ...

  9. swoole--服务平滑重启

    参考来源:https://wiki.swoole.com/wiki/page/p-server/reload.html shell代码: echo "loading..." pid ...

  10. thinkphp5.1生成缩略图很模糊

    缩略图一定要从大分辨率往小生成 $image->thumb(400,400,\think\Image::THUMB_CENTER)->save(Env::get('root_path'). ...