首页 > 其他分享 >C - Sort

C - Sort

时间:2024-04-20 23:26:18浏览次数:20  
标签:Sort map int 位置 back abc350

C - Sort

https://atcoder.jp/contests/abc350/tasks/abc350_c

 

思路

开辟一个map,

对于输入排列数组,记录每个值所在的位置 (因为后面做位置替换的时候,需要快速找到 当前位置上 值 对应位置)

 

遍历数组,如果当前位置i,存放的就是当前位置值i,则跳过,

否则,在map中查询当前位置i 存储的 位置值 j 对应的数组位置,与当前位置i的值做交换,并更新map

 

Code

https://atcoder.jp/contests/abc350/submissions/52591089

int n;

int a[200005];

int main()
{
    cin >> n;

    map<int, int> pos;

    for(int i=1; i<=n; i++){
        cin >> a[i];
        
        pos[a[i]] = i;
    }

    vector<vector<int>> cache;
    
    for(int i=1; i<=n; i++){
        if (a[i] == i){
            continue;
        }
        
        int curpos = i;
        int curval = a[i];

        int destpos = pos[i];

        a[i] = i;
        pos[i] = i;
        
        a[destpos] = curval;
        pos[curval] = destpos;
        
//        cout << i << " " << destpos << endl;
        vector<int> one;
        one.push_back(i);
        one.push_back(destpos);
        
        cache.push_back(one);
    }

    cout << cache.size() << endl;
    
    for(int i=0; i<cache.size(); i++){
        cout << cache[i][0] << " " << cache[i][1] << endl;
    }

    return 0;
}

 

标签:Sort,map,int,位置,back,abc350
From: https://www.cnblogs.com/lightsong/p/18148384

相关文章

  • quick_sort ——第k个数
    思路:本题就是一个快速排序的模板题,通过对数组中的数字进行从小到大排序,从左到右第k个数,但得注意数组下标是从0开始,所以答案应该是排序后数组下标为k-1如果您还不了解快速排序,请移步这篇文章,https://www.cnblogs.com/expect-999/p/17594345.html#include<iostream>#include......
  • element表格自带sortable属性排序错乱问题
       参考:https://blog.csdn.net/qq_40004867/article/details/129835446?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-129835446-blog-126339196.235%5Ev43%5Epc_blog_bottom_relevance_base4&dept......
  • TopoSort Review
    表达式树的优化AOV网ActivityonVertexNetwork网基于定点的行动网络。求解顺序就是拓扑排序。拓扑排序有多种。拓扑排序分层,可以分成很多同一地位的层,有一定的组合意义。计算拓扑序方案数。队列算法。反过来,还有拓扑逆序。用栈也可以。AOE网基于边,带权。车站分级Di......
  • Queue Sort
    原题链接题解1.最小数在操作之前是第一位,操作之后也必然是第一位,这就导致了如果原数组最小数后的数遍历不到,如果非有序就真的没法有序了,否则每个数都刚好大于前面一个数一定有序code#include<bits/stdc++.h>usingnamespacestd;inta[200005]={0};intmins=2e9,index;int......
  • Java stream sorted使用 Comparator 进行多字段排序
    摘要:介绍使用JavaStream流排序器Comparator对List集合进行多字段排序的方法,包括复杂实体对象多字段升降序混合排序方法。综述​ Java8的Stream使用了函数式编程模式,人如其名,它可以被用来对集合或数组进行链状流式的排序、过滤和统计等操作,从而让我们更方便的对集合或数组......
  • Java中Array.sort()的几种用法简明教程 (需要初始化要排序的对象)对 一个数组的所有元素
    Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)对一个数组的所有元素进行排序,并且是按从小到大的顺序Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)======================================================1、Arrays.sort(int[]a)......
  • el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能,利用@sort-cha
        写这篇博客的原因是前段时间做了一个数据列可变的表格,同时需要实现在网页中更新了数据列之后,能够对表格进行排序的需求。如果想要直接了解实现el-table的动态数据动态排序(列数据是通过计算获得,并且可以在页面中修改,在此基础上实现数据变化后实时更新)。请直接跳到......
  • CF1681C Double Sort 题解
    一道普及-我写了两个半小时题面。需要注意的是,每次交换需要将a和b两个数组同时交换,因此便可以想到唯一可行情况:a,b序列数字间的大小关系必须一致。举个例子2462131317970612在上面的例子中,两个序列中任意\(i\)和\(j\)满足\(a_i\lea_j\)时\(b_i......
  • CF875B Sorting the Coins 题解
    题面。算是比较简单的题目了,自己多手出几个样例就可以发现规律了。强烈建议多读几遍题目!!!!思路设0表示硬币朝上,1表示硬币朝下,则第\(0\)次与第\(n\)操作一定输出\(1\)。因为没有可以操作的对象,前者是由于全部硬币朝上,后者是由于全部硬币朝下,即使没有操作也要遍历一遍。注......
  • Sort函数的使用
    std::sort函数是<algorithm>头文件中的一个模板函数,用于对容器中的元素进行排序。通常,std::sort函数需要三个参数:指向要排序序列的起始位置的迭代器。指向要排序序列的结束位置之后一个位置的迭代器。一个可选的比较函数或可调用对象,用于确定排序顺序。当你只传递两个参数给s......