CF1768
CF1768
A. Greatest Convex
呆呆 A
,直接输出
B. Quick Sort
可怜 B
。对于从
C. Elemental Decompress
C
。事情开始变得有趣起来,被 C
卡了五个小时,正解是对每一行维护一个 set
表示除了强制要选的之外每行可以选啥。
维护一个
填法就是如果对于一个最大值,如果他没在第一个序列出现过,那就填在第一个序列,反之第二个序列,然后在第二行的 set
lower_bound
一个值填进去,这个时候如果出现过一次那就都删掉,如果没出现过那就仅删掉第二行 set
里的值。
看起来就很对。
附赠对拍 checker
:
#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int mx[N],p[N],q[N];
bool vis[N];
int main(){
freopen("qwq.in","r",stdin);
freopen("Error.out","w",stdout);
int T,n;cin>>T>>n;
for(int i=1;i<=n;i++) scanf("%d",&mx[i]);
fclose(stdin);
freopen("std.out","r",stdin);
string s1;cin>>s1;
fclose(stdin);
freopen("qwq.out","r",stdin);
string s2;cin>>s2;
if(s1!=s2) return printf("The Answer in the first Line is Wrong.\n"),0;
if(s1=="NO"){
fclose(stdout);
// cerr<<"Nothing Wrong."<<endl;
return 0;
}
for(int i=1;i<=n;i++) scanf("%d",&p[i]);
for(int i=1;i<=n;i++) scanf("%d",&q[i]);
// for(int i=1;i<=n;i++) printf("%d ",q[i]);
for(int i=1;i<=n;i++) if(mx[i]!=max(p[i],q[i])){
return printf("Wrong OutPut For the max.\n"),0;
}
for(int i=1;i<=n;i++) vis[i]=0;
for(int i=1;i<=n;i++) {
if(vis[p[i]]) return printf("Wrong OutPut P is not a Permutation.\n"),0;
vis[p[i]]=1;
}
for(int i=1;i<=n;i++) vis[i]=0;
for(int i=1;i<=n;i++) {
if(vis[q[i]]) return printf("Wrong OutPut Q is not a Permutation.\n"),0;
vis[q[i]]=1;
}
fclose(stdout);
// cerr<<"Nothing Wrong."<<endl;
}
D. Lucky Permutation
并查集维护环的关系然后,答案就是
最后记得看一下存不存在逆序对被调换的情况,存在就 -1
,不存在就 +1
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】