Problem - C - Codeforces

题目大意:给出一个长度为n的数组a,要求输出两个排列p,q,使得对于所有i属于1到n,都有max(pi,qi)=ai

1<=n<=2e5;1<=ai<=n

思路:我们可以发现如果一个数字在a中出现了两次,那么a中一个位置需要这个数字,另一个位置就是要b中是这个数字,那么我们统计a中数字出现的次数,如果是第一次出现就让p中对应位置的数字等于它,第二次出现时就让q中对应位置的数字等于它,然后我们如果这个位置更新的p,就要记录对这个位置pi的值和数组下标,作为以后构造b数组的依据,同时分别记录哪些数字没有在排列p,q,中现过,然后我们将这些没有访问过的值放入大根堆中,并将之前记录的对组数组按数值排序,从大到小遍历,并依次将大根堆中的数放入即可,最后再检验构造的两个数组是否满足排列的要求和最大值等于a的要求

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int cnt[N];
int a[N], b[N];
pair<int,int> aa[N], bb[N];
int cnta[N], cntb[N];
int ma[N];
bool visa[N], visb[N];
int main()
{cin.tie(0);ios::sync_with_stdio(false);int t;cin >> t;while (t--){int n;cin >> n;bool flag = 1;for (int i = 1; i <= n; i++){a[i] = b[i] = 0;//p,q数组cnt[i] = 0;//统计a中数字出现的次数cnta[i] = cntb[i] = 0;//统计构造好的数组中数字出现的次数visa[i] = visb[i] = 0;//统计哪些数字已经被添加进了p,q中}int tota = 0, totb = 0;for (int i = 1; i <= n; i++){cin >> ma[i];cnt[ma[i]]++;if (cnt[ma[i]] == 1){//第一次出现的,放入p中a[i] = ma[i];bb[++totb] = make_pair(ma[i], i);//记录数值,下标visa[ma[i]] = 1;}else{b[i] = ma[i];aa[++tota] = make_pair(ma[i], i);visb[ma[i]] = 1;}}priority_queue<int>qa, qb;//存放没被添加过的数for (int i = 1; i <= n; i++){if (!visa[i])qa.push(i);if (!visb[i])qb.push(i);}sort(aa + 1, aa + 1 + tota);sort(bb + 1, bb + 1 + totb);//按数值排序for (int i = tota; i >= 1; i--){//从大到小遍历a[aa[i].second] = qa.top();//依次取出堆顶数,放入对应下标的位置上qa.pop();}for (int i = totb; i >= 1; i--){b[bb[i].second] = qb.top();qb.pop();}for (int i = 1; i <= n; i++){cnta[a[i]]++;//统计构造好的数组中每个数出现的次数cntb[b[i]]++;}for (int i = 1; i <= n; i++){if (cnta[i] != 1 || cntb[i] != 1||max(a[i],b[i])!=ma[i]){//每个数是否出现次数都是1,pi,qi最大值是都等于aiflag = 0;break;}}if (!flag){cout << "NO" << endl;continue;}cout << "YES" << endl;for (int i = 1; i <= n; i++){cout << a[i]<<" ";}cout << endl;for (int i = 1; i <= n; i++){cout << b[i] << " ";}cout << endl;}return 0;
}

C. Elemental Decompress codeforces 1768C相关推荐

  1. Codeforces Round #842 (Div. 2)-C. Elemental Decompress

    题目: 题目大意: 给定一个数列t,你构造两个数列a和b,使得max(a[i],b[i])=t[i] 核心思想: 1.先根据给出的数组进行放置,优先放到a数组中,如果这个数已经在a数组中出现了,再去放 ...

  2. Codeforces Round #842 (Div. 2) 个人题解

    A. Greatest Convex 题意: 给t组数据,每组数据给定一个k,求出在[1,k)范围内,满足x!+(x-1)!%k==0的最大x 题解: 赛中可以通过观察法得知输出k-1即可,赛后可以尝 ...

  3. CUGBACM22级暑假小学期训练-简单构造

    CUGBACM22级暑假小学期训练-简单构造 这Typora打到9000多字就开始卡了,难绷 A - Gardener and the Capybaras (hard version) 题意:给一个字 ...

  4. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  5. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  6. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  7. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  8. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  9. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

最新文章

  1. C++中nothrow的介绍及使用
  2. “N+虚拟现实行业高峰论坛”成功举办,共创VR美好未来
  3. opencv 创建图像_非艺术家的图像创建(OpenCV项目演练)
  4. html文件上传添加额外参数,bootstrap-fileinput组件在上传时传递额外参数
  5. Windows phone 应用开发[14]-调用WebBrowser
  6. android如何获取系统开机时间
  7. javascript animation lib greensock gsap介绍
  8. win10修复计算机选项,为你win10系统设置启动时按F10出现修复计算机选项的技巧...
  9. 塑源码是什么_源码是什么意思啊
  10. Photoshop(PS)制作牛年红包
  11. mscbsc移动通信论坛_中国移动5G资费被确认,流量低至1毛/G, 联通电信又被动,网友:良心价...
  12. linux运行jar文件Invalid or corrupt jarfile错误
  13. QT之Tableview
  14. 8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码
  15. 【“工业大数据预测”系列】——第3篇:基于统计和信号的特征提取
  16. Android入门文档
  17. springJDBC报错NullPointException 解决问题记录
  18. 【领域驱动设计】四色建模法
  19. android设备显示电脑内容,安卓手机怎样用电脑查看记事本内容
  20. 【安全知识分享】夏季高温作业与应急知识(附下载)

热门文章

  1. grep命令基础知识
  2. 计算机控制系统的特点
  3. 4星|《经济学人2017精选书评合辑》:书都比较新且没有中译本
  4. matlab 全1矩阵,matlab全为1的矩阵
  5. 2 元打包 70 位当红明星素颜照,人脸数据泄露远超你想象
  6. 案例分析 2 :系统建模或数据库设计
  7. 敬业签桌面便签怎么设置桌面固定?
  8. 高并发之深度解析CAS [理论+案例+源码]
  9. 如何控制局域网网速_如何优化家中的网络设备,让你的网络最快?
  10. 逆向链接服务器(分布式服务器之前的协调通信,同步,消息的转发)