首页 > 其他分享 >CF1223F Stack Exterminable Arrays 题解

CF1223F Stack Exterminable Arrays 题解

时间:2024-03-07 13:13:34浏览次数:31  
标签:nxt mathit int 题解 Exterminable re CF1223F 转移 define

分析

接着这个说。

现在我们需要优化 \(\mathit{nxt}_{i}\)。重新定义一下,\(\mathit{nxt}_{i,j}\) 表示在后 \(i\) 个数中,\(j\) 第一次出现的位置,且 \([i+1,\mathit{nxt}_{i+1,a_i}-1]\) 是一个合法串。这玩意很像一个 DP,所以完全可以按照 DP 的转移思路转移:\(\mathit{nxt}_{i,j}=\min(i|a_i=j,\mathit{nxt}_{\mathit{nxt}_{i,a_i}+1,j})\)。但这个转移的前提是在 \(\mathit{nxt}_{i+1}\) 中存在 \(1 \le \mathit{nxt}_{i+1,a_i} \le n\)。因为只有在这种情况,我们才能保证转移后的 \(\mathit{nxt}\) 合法。

对于转移,直接交换再把 \(a_i\) 更新就能做到 \(O(1)\) 了。正确性可以自己想想。

这题的话,就是把字符串变成数字,复杂度 \(O(n \log n)\)。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline

const int N=3e5+10;
int n,a[N];
int f[N];
map<int,int> nxt[N];

il void solve(){
    cin>>n;
    for(re int i=1;i<=n;++i) cin>>a[i],f[i]=0,nxt[i].clear();
    nxt[n+1].clear(),f[n+1]=0;
    int ans=0;
    for(re int i=n;i>=1;--i){
        if(nxt[i+1].count(a[i])){
            f[i]=f[nxt[i+1][a[i]]+1]+1;
            swap(nxt[i],nxt[nxt[i+1][a[i]]+1]);
        }
        nxt[i][a[i]]=i;
    }
    for(re int i=1;i<=n;++i) ans+=f[i];
    cout<<ans<<"\n"; 
}

signed main(){
    int t;cin>>t;while(t--)
    solve();
    return 0;
}

标签:nxt,mathit,int,题解,Exterminable,re,CF1223F,转移,define
From: https://www.cnblogs.com/harmisyz/p/18058651

相关文章

  • CF514D R2D2 and Droid Army 题解
    分析乱搞题。考虑将区间\([l,r]\)中所有人干掉的代价。设\(cnt_{i}=\max\limits_{j=l}^{r}a_{j,i}\),则代价为:\(\sum\limits_{i=1}^{m}cnt_i\)。很显然,只有在\(\sum\limits_{i=1}^{m}cnt_i\lek\)是,我们才能将这些人全部干掉。考虑枚举右端点\(r\),与每个\(r\)对应的最......
  • P4863 题解
    Solution为了方便,我们定义\(f_n=\sum_{i=1}^{n}\sum_{j=i}^{n}\lfloor\frac{i}{j}\rfloor\times(-1)^j\)。于是答案即为\(f_b-f_{a-1}\)。观察到如果我们直接计算这个式子而不做丝毫变形的话时间复杂度是\(O(n^2)\)的。考虑把先枚举\(j\),计算\(j\)的贡献。此时就有......
  • CF1066E Binary Numbers AND Sum 题解
    分析因为\(a\)是一直没有改变的,移动的只有\(b\),所以从\(a\)的每一位的贡献入手。对于\(a\)中的从低到高第\(i\)位,其对应的十进制值是\(a_{n-i+1}\times2^{i-1}\)。注意到\(b\)是每次右移一位的,所以在\(b\)中能与\(a_{n-i+1}\)匹配的都是在下标区间\([1,m-i+1]......
  • ABC263F 题解
    Solution考虑\(f_{i,j}\)表示第\(i\)个人赢下了第\(j\)场的最大价值,答案即为\(\max_{i=1}^{n}f_{i,m}\)。然后考虑状态转移,令\(l,r\)为第\(i\)个人在打第\(j\)场比赛时的区间,\(mid\)为区间中点,然后分为两种情况:第\(i\)个人在左半部分,转移即为\(f_{i,j}=f_{i......
  • P9757 [COCI2022-2023#3] Dirigent 题解
    分析对于一个从小到大(按编号排序)的长度为\(n\)的序列\(A\),有性质:相邻两个数之差的绝对值为\(1\)的数量为\(n-1\)。那么,对于这道题,能使环剪开一条边使其按编号排序,必有相邻两个\(i,j\),满足\((A_i-A_j=1)\)的数量为\(n-1\)。注意,因为这是个环,所以\(i,j\)大小关系不能......
  • 常见问题解决 ---
    问题描述Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errorsjava.lang.AssertionError:FailedtoreadC:\Users\**\updatedBrokenPlugins.dbatcom.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:54)atcom.intellij......
  • CSP认证2022.12 452分题解
    A、现值计算题解题目简单易懂,直接写就行了。importmathn,i=map(float,input().split())n=int(n)a=list(map(int,input().split()))ans=0.00forjinrange(n+1):ans=ans+math.pow(1+i,-j)*a[j]print(ans)B、训练计划题解显然是个......
  • .NET Core WebAPI项目部署iis后Swagger 404问题解决
    .NETCoreWebAPI项目部署iis后Swagger404问题解决前言之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解下iis如何部署WebAPI项目。环境准备iisASPNETCoreModuleV2重点.NETCoreRuntimeiis的配置这里就不讲了,主要讲解......
  • 【转】[Java]引入Redisson可能会出现项目启动失败问题解决
    转自:https://blog.csdn.net/bengbuguang4321/article/details/121951650在启动项目时,Redisson自己会启动一个Redisson连接池,尝试连接redis,这时候如果遇到网络不通就会出现问题,因为redis连接不上,导致项目启动不了解决方法是:1、重新空实现了一个RedissonClient/***@ClassNa......
  • ABC323E Playlist 题解
    考虑第\(i\)时刻时,第\(j\)首歌刚好结束与第\(i-j\)时刻有关,因此设\(dp_{i,j}\)表示第\(i\)时刻第\(j\)首歌刚好结束的概率,那么\(dp\)转移方程为:\[dp_{i,j}=\sum\limits_{k=1}^ndp_{i-t_j,k}\]很容易想到记录\(\sum\limits_{j=1}^ndp_{i,j}\)的值为\(sum_i\),......