找结论——势能

简介: 找结论——势能

势能就是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;
}
相关文章
|
1月前
|
机器学习/深度学习 人工智能 测试技术
探索软件测试中的“禅”:寻找内在的平和与外在的效率####
在软件测试的世界里,我们常常被缺陷的数量、测试用例的覆盖度以及上线时间的紧迫性所困扰。但如果我们能像禅宗修行者一样,将注意力转向内心的平静与专注,或许能在纷繁复杂的测试工作中找到一种全新的效率和质量提升之道。本文将带您走进软件测试的“禅意世界”,探讨如何在看似枯燥无味的测试过程中,通过调整心态、优化方法,实现个人成长与项目成功的双赢。 ####
|
2月前
|
机器学习/深度学习 数据采集 人工智能
揭开大模型幻觉之谜:深入剖析数据偏差与模型局限性如何联手制造假象,并提供代码实例助你洞悉真相
【10月更文挑战第2天】近年来,大规模预训练模型(大模型)在自然语言处理和计算机视觉等领域取得卓越成绩,但也存在“大模型幻觉”现象,即高准确率并不反映真实理解能力。这主要由数据偏差和模型局限性导致。通过平衡数据集和引入正则化技术可部分缓解该问题,但仍需学界和业界共同努力。
40 4
|
测试技术
软件测试高频面试题“黑盒测试之正交试验法”案例剖析与实践应用
软件测试高频面试题“黑盒测试之正交试验法”案例剖析与实践应用
483 0
|
负载均衡 监控 算法
转:启发式算法对网络行为管理系统的应用研究、实用性分析及实现难度
启发式算法在网络行为管理系统中的应用研究是一个重要的领域,它可以帮助改善系统的性能和效率。启发式算法是一种通过模拟自然界的演化过程或启发式规则来解决复杂问题的方法。
88 2
|
决策智能
博弈论第十一集总结(进化稳定—合作,突变,与平衡 “ 观后感)
博弈论第十一集总结(进化稳定—合作,突变,与平衡 “ 观后感)
82 0
|
机器学习/深度学习 传感器 算法
北大&北航团队揭示电子转移规律,深度学习定量预测96种元素在任意压力下的电负性
北大&北航团队揭示电子转移规律,深度学习定量预测96种元素在任意压力下的电负性
172 0
|
人工智能 算法
蛮力法设计技术
实验内容: 1.算法设计 2.程序设计 3.复杂度分析 4.实验结果 5.实验总结:
97 0
|
存储 传感器 人工智能
从现实世界的角度去理解计算机领域的知识
​ “ 从现实世界的角度看计算机,可以帮助我们更清晰的学习计算机领域的知识。 本文试图用生活中常见的事物来解释计算机技术领域,让知识更通俗易懂 ”
911 0
 从现实世界的角度去理解计算机领域的知识