原题https://vjudge.net/problem/CodeForces-1144D

/*求序列就经过几次step变成同一个数,
其实能发现一个数经过step1或者step2变成相邻的数,
所以要经过最小次数变成同一个数字,
就是先求出出现次数最多的数字,然后把所有的其他数字都变成这个数字。
注意,出现次数最多的数字可能不相邻,序列是乱序的。
先记录数字的位置,然后从该位置往前遍历序列,
比这个数字大,就执行step2,比这个数字小,就执行step1,
结束后,再从该位置往后遍历,比这个数字大,就执行step2,比这个数字小,就执行step1. 输出中 第一行是进行了几次操作
第二行 第一个数字 进行的操作的代号 第二个和第三个是进行操作的两个数字*/
#include<bits/stdc++.h>
using namespace std;
const int MAX=2e5+;
int a[MAX],b[MAX];
int main() {
int n;
cin>>n;
int maxx=,num,pos=;
for(int i=; i<=n; i++) {
cin>>a[i]; //a[i]为输入的数字
b[a[i]]++; //b[a[i]] 记录相应数字出现的次数
if(b[a[i]]>maxx) {
maxx=b[a[i]]; //出现次数最多的
pos=i; //标记位置
}
}
cout<<n-b[a[pos]]<<endl;
if(pos>) {
for(int j=pos-; j>=; j--) {
if(a[j]==a[pos]) continue;
if(a[j]>a[j+])cout<<<<" "<<j<<" "<<j+<<endl;
else cout<<<<" "<<j<<" "<<j+<<endl;
a[j]=a[pos];
}
}
for(int k=pos+; k<=n; k++) {
if(a[k]==a[pos])continue;
if(a[k]>a[k-])cout<<<<" "<<k<<" "<<k-<<endl;
else cout<<<<" "<<k<<" "<<k-<<endl;
a[k]=a[pos];
}
return ;
}

最新文章

  1. PICT安装与使用
  2. font和lineheight冲突。
  3. Polymer.js
  4. ecshop 在php5.5上安装错误解决
  5. js控制ul的显示隐藏,对象的有效范围
  6. PHP程序员的40点陋习
  7. javascript 的点击复制事件
  8. .net mvc结合微软提供的FormsAuthenticationTicket登陆
  9. python选择排序实现与C选择排序实现
  10. php输出json中文显示编码-解决办法
  11. POJ 2050 Searching the Web
  12. ZOJ 3778 Talented Chef 模拟 [ 祝愿明天省赛一帆风顺, ZJSU_Bloom WILL WIN : )
  13. Html.Partial(&quot;&quot;)与Html.RenderPartial(&quot;&quot;)区别
  14. ServiceCallSite
  15. Python - 字母算术谜题
  16. iOS开发——An App ID with identifier &quot;*****&quot; is not avaliable
  17. ASP.NET MVC5 使用NPOI导出ExceL 返回浏览器下载
  18. OpenCV 4.0.1 找不到R.styleable解决
  19. Nop 4.1版本已经迁移到.net core2.1版本
  20. unity过场动画组件Timeline

热门文章

  1. PHP0020:PHP 单文件上传 多文件上传
  2. MySQL 8 InnoDB 集群管理
  3. 如何将下载的Jar包导入本地Maven仓库-sunziren
  4. day8 编码2
  5. QPixmap和QImage
  6. 吴裕雄--天生自然 HADOOP大数据分布式处理:安装XShell
  7. [CF1311F] Moving Points - 树状数组
  8. Java,C 位移运算符 有符号右移>>与无符号右移>>>
  9. win10家庭版更改本地账户名、C盘Users下文件夹名和环境变量等
  10. 使用vegrant安装centos7