当前位置: 首页 > 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.zskr.cn/news/22584.html

相关文章:

  • 5-互评-OO之接口-DAO模式代码阅读及应用
  • PWN手的成长之路-18-ciscn_2019_ne_5-rettext
  • 3.springboot-容器机制-@注解
  • 日志分析-windows日志分析base
  • 课后作业3
  • KMP和Manacher
  • 索引有什么作用?
  • LinuxC++——etcd-cpp-api精简源代码函数参数查询参考 - 教程
  • mongoDB体验
  • TELUS如何通过Google技术栈实现业务增长与生产力跃升
  • 你的程序为何卡顿?从LINUX I/O三大模式寻找答案
  • 日总结 13
  • 题解:P8019 [ONTAK2015] OR-XOR
  • DP 思维好题(转载)
  • python sse的是什么?
  • 万字长文详述单据引擎原理、流程、单据管理 - 智慧园区
  • 【比赛记录】2025NOIP 冲刺模拟赛合集I
  • 12 继承--instanceof和类型转换
  • CSDN Markdown 编辑器快捷键大全 - 实践
  • Java了解
  • NVIDIA Jetson AGX Xavier刷机教程
  • 洛谷p1462-通往奥格瑞码道路
  • AI安全新威胁:提示注入与模型中毒攻击深度解析
  • Codeforces 380E Sereja and Dividing 题解 [ 紫 ] [ 线段树 ] [ 贪心 ] [ 数学 ]
  • JPA教程
  • v-model 的实现原理
  • 详细介绍:【译】Visual Studio 中针对 .NET MAUI 的 XAML 实时预览功能的增强
  • docker镜像层和容器层
  • 2025.10.16总结 - A
  • 20251016 正睿二十连测