首页 > 其他分享 >Codeforces Global Round 22 D

Codeforces Global Round 22 D

时间:2022-10-01 22:47:07浏览次数:47  
标签:const cur 22 int Global Codeforces 我们 define

D. Permutation Addicts

我们观察给的条件
发现不是那么明朗 我们把x变成ai看看
if a[i]<=k b[a[i]] := a[j] (j<i) && a[j]>k 如果没有就把b[a[i]]:=n+1肯定还是>k的
这不就相当于把b[a[i]]>a[i] 所以我们统计b[i]>i有几个 k就是几
当然可以通过第二个条件 那样统计的就是n-k
然后我们可以发现的是 a[1]因为前面没有东西 所以b[a[1]]=n+1 || b[a[1]]=0
而且n+1和0只会存在一个 因为你要是有0了 就证明前面有大于k的数 反之亦然
所以我们这样就可以直接找出a[1]???
显然不是的 我们观察第二个样例 有n+1 但是有3个
但是后面出现了3个3 这就给了我们一个限制 那就是前面这一段结尾一定是3 这样才是合法的
我们可以开个vector数组 将每个值的下标存下来 因为我们是从前往后做的
要是该vector里面下标有被征用的 比如这里的3
那我们就必须把这个3放在结尾
可以感性理解一下

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}

void solve() {
    int n,k=0;cin>>n;
    vector<int>v[n+2],ans,b(n+1);
    for(int i=1;i<=n;i++){
        cin>>b[i];
        k+=b[i]>i;
        v[b[i]].push_back(i);
    }
    int cur=0;
    if(v[n+1].size())cur=n+1;
    while(ans.size()<n){
        for(auto &it:v[cur])
            if(v[it].size())
            {swap(it,v[cur].back());break;}
        ans.insert(ans.end(),v[cur].begin(),v[cur].end());
        cur=v[cur].back();
    }
    cout<<k<<endl;
    for(auto i:ans)cout<<i<<' ';cout<<endl;
}
signed main(){
    fast
    int T;cin>>T;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:const,cur,22,int,Global,Codeforces,我们,define
From: https://www.cnblogs.com/ycllz/p/16747917.html

相关文章

  • 2022-2023-1 20221318 《计算机基础和程序设计》第五周学习总结
    作业信息这个作业属于那个班级https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03作业目标学习......
  • 2022 牛客多校题解
    2022牛客多校题解Contest1JContest2JContest3HHack(SAM)枚举B中的右端点,查询最长在A串中向右可以延伸多长。考虑对A串建立一个SAM,然后对于B串从左到右跑SAM的D......
  • Windows 11升级22H2
    Windows11升级22H21.下载Windows1122H2镜像访问MSDNITellYou下载2.添加注册表项绕过Windows11检测参考这篇文章,以管理员权限运行命令行,输入:regadd"HKLM\SY......
  • 闲话 22.10.1
    闲话这才是真正的闲话最后讲了一下求导和积分但是感觉没几个人听听了也没几个人会——bycrs_line如果有不会的东西都可以来找我!给solution引流但是高数很多东西真......
  • 【闲话】2022.10.01
    今天早上下雨充分证明了\(\texttt{雨假同期命题}\)的正确性但是国庆没有放假老天爷:玩我呢早上:\(\textsf{bikuhiku}\):完蛋,早上没外套,我再拿一件吧早操前:\(\texts......
  • The 2022 ICPC Asia Regionals Online Contest (II)部分题解
    ......
  • 2022-2023-1 20201324《信息安全系统设计与实现(上)》第11章
    目录1EXT2文件系统2EXT2文件系统数据结构(1)通过mkfs创建虚拟磁盘(2)虚拟磁盘布局3邮差算法(1)将索引节点号转换为磁盘上的索引节点41级文件系统函数(1)手动实现mkdir(2)手动实现......
  • 22 暑期 CD 班联考 Day4 之降低力度
    WZY在线捐献瞳孔沙城之巅城市定向SUNZH在线学猫叫新知之神SSHWY在线送温暖......
  • 2022.10.1
    B.CrazyBinaryString给01串,问最长的01数量相等的子串和子序列长度。#include<bits/stdc++.h>usingnamespacestd;map<int,int>M;intn;chars[100005];intma......
  • 2022-2023-1 20221404 《计算机基础与程序设计》第5周学习总结
    2022-2023-120221404《计算机基础与程序设计》第5周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程序设计第......