找结论——势能

简介: 找结论——势能

势能就是i + a[i],很有用的结论 对于能完成交换,从A变成B,势能数组一定相同 找出最小交换次数,贪心的方案是:最近的先交换 找到最近的在可以用数组数组和set实现 具体细节见代码


#include<bits/stdc++.h>
#define debug1(a) cout<<#a<<'='<< a << endl;
#define debug2(a,b) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<endl;
#define debug3(a,b,c) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<endl;
#define debug4(a,b,c,d) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<"  "<<#d<<" = "<<d<<endl;
#define debug5(a,b,c,d,e) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<"  "<<#d<<" = "<<d<<"  "<<#e<<" = "<<e<<endl;
#define debug0(x) cout << "debug0: " << x << endl
#define fr(t, i, n)for (long long i = t; i < n; i++)
#define YES cout<<"Yes"<<endl
#define NO cout<<"No"<<endl
#define fi first
#define se second
#define int long long
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
//#pragma GCC optimize(3,"Ofast","inline")
//#pragma GCC optimize(2)
const int N = 2e5+10;
int aa[N];
int lowbit(int x)  // 返回末尾的1
{return x & -x;}
void add(int x,int w){
    for(int i = x;i < N;i += lowbit(i)){
        aa[i] += w;
    }
}
int query(int u){
    int res = 0;
    for(int i = u;i > 0;i -= lowbit(i)){
        res += aa[i];
    }
    return res;
}
int a[N],b[N];
multiset<int> A,B;
void solve() 
{
    int n;cin >> n;
    
    for(int i = 1; i <= n; i++)cin >> a[i],A.insert(a[i] + i);
    for(int i = 1; i <= n; i++)cin >> b[i],B.insert(b[i] + i);
    if(A != B)
    {
        cout << -1 << endl;
        return ;
    }
    set<PII> s;
    int ans = 0;
    for(int i = 1; i <= n; i++)s.insert(PII{a[i] + i, i});
    for(int i = 1; i <= n; i++)
    {
        set<PII>::iterator it = s.lower_bound(PII{b[i]+i,0});
        int t = query((*it).second) + (*it).second;
        
        add(1,1);
        assert((*it).second>0);
        add((*it).second,-1);//这里相对位置不用加1,因为这个是相对于a数组原始位置而言的
        ans += t - i;
              
        s.erase(it);
    }
    cout << ans << endl;
}
signed main()
{
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    int T = 1;//cin >> T;
    while(T--){
        solve();
    }
    return 0;
}
相关文章
|
存储 数据可视化 Serverless
使用蒙特卡罗模拟的投资组合优化
在金融市场中,优化投资组合对于实现风险与回报之间的预期平衡至关重要。蒙特卡罗模拟提供了一个强大的工具来评估不同的资产配置策略及其在不确定市场条件下的潜在结果。
243 1
|
25天前
|
存储 编解码 算法
微帧科技:综合多项指标评价视频质量,才能更接近主观感受
视频质量评价指标如PSNR、SSIM和VMAF是衡量画面质量的重要工具,但不应成为视频工作者的唯一目标。微帧致力于优化画质,提升观看体验,强调综合评估指标,以实现最接近人眼主观感受的效果。本文探讨了PSNR avg.MSE与PSNR avg.log的区别,以及VMAF的优势与不足。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
揭开大模型幻觉之谜:深入剖析数据偏差与模型局限性如何联手制造假象,并提供代码实例助你洞悉真相
【10月更文挑战第2天】近年来,大规模预训练模型(大模型)在自然语言处理和计算机视觉等领域取得卓越成绩,但也存在“大模型幻觉”现象,即高准确率并不反映真实理解能力。这主要由数据偏差和模型局限性导致。通过平衡数据集和引入正则化技术可部分缓解该问题,但仍需学界和业界共同努力。
27 4
|
6月前
|
供应链 监控 数据挖掘
高质量决策是伪命题吗?拨开迷雾,回归决策价值
高质量决策是伪命题吗?拨开迷雾,回归决策价值
98 1
|
供应链 算法 安全
【不确定性研究】基于信息间隙决策理论的综合能源系统优化调度研究【改进粒子群优化算法求解】(Matlab代码实现)
【不确定性研究】基于信息间隙决策理论的综合能源系统优化调度研究【改进粒子群优化算法求解】(Matlab代码实现)
|
决策智能
博弈论第十一集总结(进化稳定—合作,突变,与平衡 “ 观后感)
博弈论第十一集总结(进化稳定—合作,突变,与平衡 “ 观后感)
74 0
|
机器学习/深度学习 传感器 算法
北大&北航团队揭示电子转移规律,深度学习定量预测96种元素在任意压力下的电负性
北大&北航团队揭示电子转移规律,深度学习定量预测96种元素在任意压力下的电负性
165 0
|
定位技术 决策智能
运筹优化学习23:单因素方差分析理论及Matlab代码实现(上)
运筹优化学习23:单因素方差分析理论及Matlab代码实现
运筹优化学习23:单因素方差分析理论及Matlab代码实现(上)
|
决策智能
运筹优化学习23:单因素方差分析理论及Matlab代码实现(下)
运筹优化学习23:单因素方差分析理论及Matlab代码实现
运筹优化学习23:单因素方差分析理论及Matlab代码实现(下)
|
架构师 安全 搜索推荐
技术人员如何破除达克效应(认知偏差)?
技术人员如何破除达克效应(认知偏差)?
323 0
技术人员如何破除达克效应(认知偏差)?
下一篇
无影云桌面