当前位置: 首页 > news >正文

【题解】CF2086C Disappearing Permutation

修复时 \(a_i\) 必须要用掉 \(i\),此时就要对原先放 \(i\) 的位置修复,于是又要用掉一个数,又要再修一个点,如此循环往复直到这次修复需要的数恰好是被吃掉的(形成环),显然修复次数就是环的长度,直接循环计算即可。可以发现这一轮修过的点下一轮肯定还要修,如果下一轮被吃掉的点恰好是之前修过的,就没有代价;如果是没修过的,那就从当前点开始循环修一遍。每个点修过之后就记录一下,下次就不用修了,时间复杂度就是 \(O(n)\),答案显然是把当前置零的点修完之后记录下来的点的数量。

#include <bits/stdc++.h>
#define mem(a,v) memset(a,v,sizeof(a))
#define endl '\n'
#define FILE(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout);
#define pii pair<int,int>
#define pll pair<long long,long long>
#define st first
#define nd second
#define pb push_back
using namespace std;
using ll=long long;
using lld=long double;
const int N=1e5+10;
const ll mod=1000000007;
int T,n,k,a[N],id[N];
ll ans;
bool vis[N];
void solve(){ans=0,mem(vis,0),cin>>n;for(int i=1;i<=n;i++)cin>>a[i],id[a[i]]=i;for(int i=1,b;i<=n;i++){for(cin>>b;!vis[b];b=id[b])vis[b]=true,ans++;cout<<ans<<' ';}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);for(cin>>T;T--;cout<<endl)solve();return 0;
}
http://www.hskmm.com/?act=detail&tid=32631

相关文章:

  • Windows 事件ID + 登录类型 + 服务对应表大全
  • 5-互评-OO之接口-DAO模式代码阅读及应用
  • [Paper Reading] VLM2VEC: TRAINING VISION-LANGUAGE MODELS FOR MASSIVE MULTIMODAL EMBEDDING TASKS
  • Index of /ubuntu-cdimage/ubuntukylin/releases/
  • ubuntu安装和设置为图形界面或命令行界面
  • 10.16日学习笔记
  • day 3
  • PWN手的成长之路-18-ciscn_2019_ne_5-rettext
  • 技术人不用当“兼职运营”:2025微信编辑器实用指南,让产品更新日志/API教程产出效率提升3倍
  • 站位1
  • ubuntu2204系统ip地址配置
  • 10.16 —— 2021ccpc桂林D,B
  • day 2
  • 日志分析-windows日志分析base
  • 2025/10/16 模拟赛笔记 - sb
  • 课后作业3
  • KMP和Manacher
  • 10月16日日记
  • 日志|二叉树|404左叶子之和|112路径总和|129求根节点到叶子节点数字之和|
  • 第 5 天:C 语言运算符与表达式 —— 数据处理的优秀的工具集
  • mongoDB体验
  • TELUS如何通过Google技术栈实现业务增长与生产力跃升
  • 云服务器上部署 EasyTier中转服务器
  • 问世界
  • 为 .NET 10 GC(DATAS)做准备
  • LLM学习记录DAY3
  • 日总结 13
  • 黄景行电脑软件
  • 开源许可协议 gpl vs mit?
  • 二进制警报器