首页 > 其他分享 >The sol to pairing

The sol to pairing

时间:2024-11-13 19:45:45浏览次数:1  
标签:int pairing sol num fi se

The sol to pairing

https://www.luogu.com.cn/problem/P11187

思路

把答案序列中相邻而相等的两个数,我们称之为“块”。那么可以发现,对于以某块为结尾的一个答案序列,其一定是由一个 结尾不为该块的序列 转移而来。因而,本题具有最优子结构性质,可以使用动态规划求解。

\(1.\) 对于偶数位,考虑到第偶数个数需要从上一个相同的数转移而来,预处理一个数组,存储上一个与之相同的数的下标。

\(2.\) 对于奇数位,维护最大、次大值且要保证最大次大值不相等,来应对相邻块之间值相等的情况。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n;
int a[N];
int f[N][3];
int pre[N];
int num[N];
int fi=0,se=0;

int main(){
    freopen("pairing.in","r",stdin);
    freopen("pairing.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(!num[a[i]]) num[a[i]]=i;
        else{
            pre[i]=num[a[i]];
            num[a[i]]=i;
        }
    }
    // for(int i=1;i<=n;i++) cout<<pre[i]<<" ";cout<<endl;
    // memset(f[1],-0x3f,sizeof f[1]);
    f[0][1]=-0x3f3f3f3f;
    for(int i=1;i<=n;i++){
        int j=pre[i];
        //cout<<pre[i]<<endl;
        f[i][0]=max(f[i-1][0],f[i-1][2]);
        f[i][2]=max(f[i][2],f[j][1]+1);
        if(a[i]==a[fi]) f[i][1]=max(f[i][1],f[se][2]+1);
        else f[i][1]=max(f[i][1],f[fi][2]+1);
        if(f[i][2]>=f[fi][2]){
            if(a[i]!=a[fi]) se=fi;
            fi=i;
        }
        else if(f[i][2]>=f[se][2]) se=i;
    }
    cout<<max(f[n][0],f[n][2])<<endl;
    return 0;
}

Happy day!!!--这题调了好久,嘤嘤嘤。
https://www.luogu.com.cn/record/188550038

标签:int,pairing,sol,num,fi,se
From: https://www.cnblogs.com/yingxilin/p/18544663

相关文章

  • The sol to expr
    Thesoltoexprhttps://www.luogu.com.cn/problem/P11186思路递归加上一点点优化……重点:根据区间范围预处理出所有情况。具体的看以下题解https://www.luogu.com.cn/article/i0oqvl99e……水完了Code#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5;......
  • NIZK零知识证明-Groth10-Short Pairing-based Non-interactive Zero-Knowledge Argume
    点个关注吧谢谢!有需要论文知道、审稿,申博资料准备,答辩等的可以私信前序文章见:一;二。五、CommonReferenceString公共字符串设定q=n......
  • kinect2.0 Self-Learning (1) - recycling disconnect (solved)
    Firstedit:Afterdowningkinect2.0sdk,Ifollowedacoursetoverifyifkinect2.0canconnectwithmylaptop.Everythingseemsgoingwell.However,Ifoundthekinect2.0wouldconnectfor5secondsthendisconnectfor5secondsagainandagain,thatrea......
  • 华为路由器/交换机配置Console口AAA认证以及Telnet登录
    一、Console口登录 Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentica......
  • Solution - Codeforces 1394B Boboniu Walks on Graph
    考虑先分析最后的图会长成什么样。因为每个点都只会连出一条有向边,且最后还能走回自己。所以可以知道的是图会有许多个环来组成,且每个环都无交。但是这个判定条件明显不是很优秀,考虑继续转化。考虑到对于一个有向环,每个点的出度和入度都需要为\(1\)。那么出度为\(1\)题目......
  • Solution - Codeforces 1217E Sum Queries?
    对于这个“好的”的判定条件看起来有点奇怪,不妨结合上题目要求的“最小\(sum\)”一起考虑。因为要最小化\(s_p\),所以一个比较直观的想法是先从选的数个数入手。考虑到如果选的只有\(1\)个数\(a_i\),那么\(sum=a_i\),一定是好的,排除。如果选的是\(2\)个数\(a_i,a_j\),......
  • 对 Wireshark、SolarWinds、Fiddler、TCPdump、NetworkMiner、Charles、JMeter、Fireb
    对Wireshark、SolarWinds、Fiddler、TCPdump、NetworkMiner、Charles、JMeter、Firebug、HTTPWatch和AntiARPSniffer等网络分析工具的详细对比分析,内容包括功能、特点、适用场景、平台支持等方面。表格总结了它们的主要区别与特点。工具名称功能适用场景平台支持优......
  • MySQL问题解决记录(1):IP address 'xxx.xxx.xxx.xxx' could not be resolved: 这是在主机
    目录问题描述排查流程解决方案总结问题描述[Warning][MY-010055][Server]IPaddress'xxx.xxx.xxx.xxx'couldnotberesolved:这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。问题表现:A主机的服务在访问B主机的MySQL数据库时,产......
  • Sol - P2900 [USACO08MAR] Land Acquisition G
    完整准确地理解FlushHu的题解。0x00初步分析我们发现对于矩形\(i,j\)满足\(h_i\leqh_j,w_i\leqw_j\),那么选\(j\)的时候一定可以并购\(i\),因此将\(i\)删去。将剩下的矩形按照\(h\)从大到小排序,此时\(w\)从小到大。因为如果合并的不是一段连续区间,那么中间未被......
  • 在Windows操作系统中,HKEY_CURRENT_USER\Console 是注册表中的一个键路径,它用于存储与
    在Windows操作系统中,HKEY_CURRENT_USER\Console是注册表中的一个键路径,它用于存储与控制台窗口(例如命令提示符窗口,CMD)的配置和设置相关的数据。以下是HKEY_CURRENT_USER\Console的详细说明:1. 位置路径:HKEY_CURRENT_USER\Console\2. 作用这个注册表项包含了当前用户对控制......