【Codeforces AIM Tech Round 4 (Div. 2) C】
·将排序限制于子序列中,又可以说明什么呢?
C. Sorting by Subsequences
·英文题,述大意:
输入一个长度为n的无重复元素的序列{a1,a2……an}(1<=n<=105,|ai|<109,将其分成p个不重复的子序列,使得只对每个子序列升序排序,能够在各个子序列排完序后,整个序列也是升序排列好的。求p的最大值,将其输出后并按任意顺序每一行输出每个子序列长度和每个元素排序好的下标。
·分析:
对子序列排序,最终竟然可以使得整个序列都排好序,那么我们可以清晰地发现:每一个子序列排序一定可以将它含有的元素全部放到全序列排序后的对应位置。例如,对于序列{4,1,2,5},它的全序列排序排序结果为{1,2,4,5},那么对于一种可行解:分为子序列{4,1,2}和{5},我们对子序列{4,12}的排序必定要将他们三个元素还原到全序列排序后的位置。
这样就存在一种依赖关系,将其归纳为结论就是:如果元素ai的下标i不等于全序列排序后它的下标j,那么元素ai,aj必定属于同一个划分的子序列。这样很好理解:对于一个ai,它排序后要前往j位置(而且i!=j),那么原本在j位置的数就要被挤出来另寻其他的位置,然后它又去占其他数的位置,直到这些数的占位置关系构成一个环,就可以将它们都安置了。然后我们就将上述操作的一些列元素归为一个子序列,由于这样做是保证最基本的各个元素排序能够到达正确位置,所以划分出来的子序列一定是最多的。
1 #include<vector> 2 #include<stdio.h> 3 #include<algorithm> 4 #define go(i,a,b) for(int i=a;i<=b;i++) 5 using namespace std; 6 const int N=100003; 7 struct info{int I,ID,val;}a[N]; 8 int n,t,use[N];vector<int>box[N]; 9 bool cmp1(info A,info B){return A.val<B.val;} 10 bool cmp2(info A,info B){return A.ID<B.ID;} 11 int main() 12 { 13 scanf("%d",&n);go(i,1,n)scanf("%d",&a[i].val),a[i].ID=i; 14 sort(a+1,a+n+1,cmp1);go(i,1,n)a[i].I=i;sort(a+1,a+n+1,cmp2); 15 go(i,1,n)if(!use[i]) 16 { 17 use[i]=1;t++;box[t].push_back(i);int p=i; 18 while(a[p].I!=i)p=a[p].I,use[p]=t,box[t].push_back(p); 19 sort(box[t].begin(),box[t].end()); 20 } 21 printf("%d\n",t); 22 go(i,1,t) 23 { 24 printf("%d ",box[i].size()); 25 go(j,0,box[i].size()-1)printf("%d ",box[i][j]); 26 puts(""); 27 } 28 return 0;}//Paul_Guderian
别忘了来时带着盈满的晚霞,
和那忘忧草放入我的行囊……——汪峰《不经意间》
转载于:https://www.cnblogs.com/Paul-Guderian/p/7426303.html
【Codeforces AIM Tech Round 4 (Div. 2) C】相关推荐
- AIM Tech Round 4 (Div. 2)ABCD
这一场真的是血崩,a,b都被hack,还好结束前重交都过了 A:题意:找出得到k个不同的字符,所要更改的最小字符数 题解:首先如果k>字符串长度,直接impossible,然后直接记录一下不重复 ...
- AIM Tech Round 3 (Div. 2) A B C D
虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场 ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被h ...
- AIM Tech Round 4 (Div. 2)
A题 分析:暴力 1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" ...
- 【CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]】
[CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]] Description This is the easier version of ...
- Codeforces 504 A (Round #285 div.1 A) Misha and Forest
Codeforces Round #285 (Div.1) A Misha and Forest 水题水题水-- 题意:给你一些点,给出他们连通了多少个点以及这些点的下标的异或值,让你找出一个图 题解 ...
- [CF复盘] Codeforces Round 874 (Div. 3) 20230520】
[CF复盘] Codeforces Round 874 (Div. 3 20230520 总结 A. Musical Puzzle 2. 思路分析 3. 代码实现 B. Restore the Wea ...
- 【Codeforces Round #424 (Div. 2) C】Jury Marks
[Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对 ...
- 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)
[题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #299 (Div. 2) B】Tavas and SaDDas
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次取出最小的数字,在后面加上一个4或一个7就好; 会发现最后的数字很少的. [代码] #include <bits/stdc ...
最新文章
- 哀悼!2007年图灵奖得主Edmund Clarke因感染新冠逝世
- 代码逻辑分析_入行数据分析师不得不看的10本书
- 昕灵感应流行坊(Shop.25941.Cn)^_^全新开张
- 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(三)
- Spring 学习教程(一): 认识 Spring 框架
- hbase filter原理_HBase应用|HBase在移动广告监测产品中的应用
- LeetCode 2022春季赛 2. 烹饪料理(状态枚举)
- GitHub 热点速览 | 极客们都在玩这些 Terminal!
- 《Storm技术内幕与大数据实践》一第1章 绪论
- (九)特征提取之主成分分析(PCA)
- Unity两中方式加载图片
- xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
- I2C总线协议原理介绍
- WIN7专业版32/64位更换系统语言注意
- 很清晰的解读i2c协议
- 高效率OCR场景文字图片合成工具发布!
- js获取屏幕宽度方法大全
- word复制或粘贴等操作使应用未响应
- C++相关问题笔记(一)
- 0003 渗透测试标准
热门文章
- Nginx系列——Windows中安装Nginx
- javascript轻松解决前端数据排序(互换,置顶,上移,下移),快收藏吧
- 使用Cmder替换cmd,让开发更高效
- jq动态拼接html页面及数据
- VSCode 插件离线安装方法(转载)
- 04. Make sure that objects are initialized before they're used
- servlet处理多个请求 笔记
- 双线macd指标参数最佳设置_MACD“双线合一”抄底法:等待个股最佳买点的出现,及时买进...
- js已知文件路径得到file对象_Node之文件流与文件路径操作
- 引用饼图echarts_3D 饼图在 VUE 中的实现