HDU 5338 ZZX and Permutations

若依管理系统RuoYi-Vue(二):权限系统设计详解 本篇文章试图讲解若依Vue系统中的权限设计原理以及实战,为什么是“试图”?因为这也是摸索着理解的,不一定准 若依Vue系统中的权限管理部分的功能都集中在了系统管理菜单模块中,如下图所示。其中权限部分主要涉及到了用户管理、角色管理、菜单管理、部门管理这四个部分。 一、若依Vue系统中的权限分类 根据观察,若依Vue系统中的权限分为以下几类 菜单权限:用户登录系统之后能看到哪些菜单 按钮权限:用户在一个页面上能看到哪些按钮,比如新增、删除等按钮 接口权限:用户带着认证信息请求后端接口,是否有权限 阅读详情
AI摘要

本文深入探讨了算法、数据结构、版本控制等核心技术领域的关键概念与实践应用,包括排序算法、动态规划、哈希算法等核心算法,以及Git等版本控制系统在实际开发过程中的运用。同时,文章还涉及了大数据开发、AI音视频处理、自动化测试等前沿技术,旨在为开发者提供全面的技术指南。

ZZX and Permutations

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 827    Accepted Submission(s): 259


Problem Description
ZZX likes permutations.

ZZX knows that a permutation can be decomposed into disjoint cycles(see https://en.wikipedia.org/wiki/Permutation#Cycle_notation). For example:
145632=(1)(35)(462)=(462)(1)(35)=(35)(1)(462)=(246)(1)(53)=(624)(1)(53)……
Note that there are many ways to rewrite it, but they are all equivalent.
A cycle with only one element is also written in the decomposition, like (1) in the example above.

Now, we remove all the parentheses in the decomposition. So the decomposition of 145632 can be 135462,462135,351462,246153,624153……

Now you are given the decomposition of a permutation after removing all the parentheses (itself is also a permutation). You should recover the original permutation. There are many ways to recover, so you should find the one with largest lexicographic order.
 

Input
First line contains an integer  t , the number of test cases.
Then  t  testcases follow. In each testcase:
First line contains an integer  n , the size of the permutation.
Second line contains  n  space-separated integers, the decomposition after removing parentheses.

n≤105 . There are 10 testcases satisfying  n≤105 , 200 testcases satisfying  n≤1000 .
 

Output
Output  n  space-separated numbers in a line for each testcase.
Don't output space after the last number of a line.
 

Sample Input
   
2 6 1 4 5 6 3 2 2 1 2
 

Sample Output
   
4 6 2 5 1 3 2 1
 

Author
XJZX
 

Source
 

Recommend
wange2014   |   We have carefully selected several similar problems for you:   5368  5367  5366  5365  5364 

 




多校的一道题,题意特别绕,方法不难。
题意就是给出一串数,你可以把它们分成任意个单独的不相交循环( disjoint cycles),题中的第一个样例就是分成了(1 4 5)(6 3 2),分了之后对其进行重组,重组的规则就是按照循环的,比如(1 4 5)就是第1个位置放4,第4个位置放5,第5个位置放1,后面那个类似。问题是问你如何得到一个字典序最大的串。

这题可以任意划分,要字典序最大的串,那么靠前位置的数字应该尽量大。以第一个位置为例,根据观察可以得出第一个位置能放的数字应该是原串中位于1的左边的任何一个数和1右边的那个数。比如54123,那么划分之后第一个位置可能放5,4,和2,划分方法分别是(541)(23)那么第一个数就是5,如果是(5)(41)(23)第一个数就是4,如果是(54)(12)(3)第一个数就是2。得到了这个结论,我们就可以从1开始,在左边的所有位置和右边一位中寻找最大的数放在那个位置。
但是要注意这题中n有10e5,用模拟会超时,所以应该用线段树进行查询,还有要用set存储和查找。



代码:

<pre name="code" class="cpp">#include <stdio.h>
#include <string.h>
#include <set>
#include <string.h>

#define max(a,b) a>b?a:b
#define min(a,b) a>b?b:a
#define N 100005

#define lson l,m,root<<1
#define rson m+1,r,root<<1|1

using namespace std;
int n,t;
int a[N];
int sx[N];
int v[N<<2];
int w[N];
int vv[N];

int ma[N<<2];

void pushup(int root)
{
    ma[root]=max(ma[root<<1],ma[root<<1|1]);
}

void build(int l,int r,int root)
{
    if(l==r)
    {
        ma[root]=a[l];
        return ;
    }
    int m=(l+r)>>1;
    build(lson);
    build(rson);
    pushup(root);
}

void update(int wz,int val,int l,int r,int root)
{
    int m=(l+r)>>1;
    if(l==r)
    {
        ma[root]=val;
        return ;
    }
    if(wz<=m)
    {
        update(wz,val,lson);
    }
    else
    {
        update(wz,val,rson);
    }
    pushup(root);
}

int query(int st,int en,int l,int r,int root)
{
    int m=(l+r)>>1;
    
    int ans=-1;
    if(st==l&&r==en)
    {
        return ma[root];
    }
    else
    {
        if(en<=m)
        {
            ans=query(st,en,lson);
        }
        else if(st>m)
        {
            ans=query(st,en,rson);
        }
        else
        {
            ans=max(query(st,m,lson),query(m+1,en,rson));
        }
        
    }
    return ans;
    
}


int main()
{
    scanf("%d",&t);
    while(t--)
    {
        set<int>st;//set存的是已确定的数,就是已经被括起来的数。
        memset(a,0,sizeof(a));
        memset(sx,0,sizeof(sx));
        memset(w,0,sizeof(w));
        memset(v,0,sizeof(v));
        memset(ma,-1,sizeof(ma));
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            w[a[i]]=i;//w[i]记录了i在原串的位置。
        }
        build(1,n,1);
        for(int i=1; i<=n; i++)
        {
            if(sx[i]!=0)continue;//sx[i]用来存放最终的顺序,开始为0,如果不为0则已确定此位置。
            int l=1;
            if(!st.empty())//如果非空说明已经有括号了。
            {
                set<int>::iterator temp=st.lower_bound(w[i]);
//这个set<int>::iterator是容器里的指针,c++好像可以用auto,这里的作用是如果非空找出容器里不小于i的位置的第一个数。
                if(temp!=st.begin())//如果temp和set中的开头元素不一样,说明w[i]前面已经有元素被括起来了,那么就从那个后一个开始。否则就从1开始。
                {
                    temp--;
                    l=(*temp)+1;
                }
            }
            int maxv=query(l,w[i],1,n,1);//找出区间l到w[i]的最大值。
            if(maxv<a[w[i]+1]&&!v[a[w[i]+1]]&&w[i]!=n)
//如果这个最大值小于右边那个数并且i不在最右而且右边那个数没访问过,就选右边那个。注意此时括号只画了左半边,右边还没闭合。
            {
                sx[i]=a[w[i]+1];
                update(w[i]+1,-1,1,n,1);//把那个更新成-1.
            }
            else{//此时这个括号确定了,闭合。
                sx[i]=maxv;
                v[maxv]=1;
                for (int j=w[maxv];j<w[i];j++)//依次确定顺序。
                {
                    sx[a[j]]=a[j+1];
                }
            st.insert(w[i]);//这里把i的位置存入set,也就是i被括起来了。

            }
        }
        
        for(int i=1; i<n; i++)
        {
            printf("%d ",sx[i]);
        }
        printf("%d\n",sx[n]);
        //        printf("\n");
        //        printf("vvvvvv\n");
        //        for(int i=1; i<=n; i++)
        //        {
        //            printf("%d ",v[i]);
        //        }
        //        printf("\n\n\nasx\n");
        //        for(int i=1; i<=n; i++)
        //            printf("%d ",a[sx[i]]);
    }
}


 
 


UILocalizedIndexedCollation 的浅分析 这篇文章是我在看过其英文档后写得。。。。 UILocalizedIndexedCollation 是相当于是tableView的一个辅助类,用来对tableView的数据源进行管理,排序,定位。 UILoaclizedIndexedCollation 提供了对tableView的section titles 和section index titles的配置。带有section index的tab 阅读详情

相关推荐

XX新区二三区控制性详细规划.doc

XX新区二三区控制性详细规划.doc

hdoj--1068--Girls and Boys(最大独立集)

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9464Accepted Submission(s): 4320 Problem Description...

weixin_30622181的博客 428

TCP协议中ARQ自动重传的三种实现方式对比(含SACK详解)

本文深入解析TCP协议中ARQ自动重传的三种实现方式,包括停止-等待、回退N步和选择重传协议,特别详细介绍了SACK机制的工作原理和优势。通过对比分析各协议的效率、复杂度和适用场景,为网络通信中的可靠性传输提供了实用的选型指南。

weixin_30776273的博客 462

使用官方提供的帮助也下载不了源码的解决方案

Downloading the Source Tree Installing Repo Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Version Control. To install, initia

android大牛MrJing 活动中心 2303

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 423

python实现语音信号的分帧、加窗、预处理

语音信号实现分帧、加窗、预处理音频文件读取预加重分帧加窗 音频文件读取 librosa是非常强大的python语音信号处理库。 读取音频: 使用语句librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)读取音频文件,默认的采样率是22050,若要保留音频的原始采样率,使用sr=None。 其中: path:表示音频文件的路径 sr:表示采样率 mono:bool,是布尔类型,表示是否将信号转换为单声道 offset:float,后

weixin_45272908的博客 1万+

HDU 5338 ZZX AND PERMUTATIONS 线段树

链接 多校题解 胡搞。。。 题意太难懂了。。 ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 310Accepted Subm...

aodiyi6351的博客 136

利用Python爬虫获取淘宝商品评论:实战案例分析

在数字化时代,数据的价值日益凸显,尤其是对于电商平台而言,商品评论作为用户反馈的重要载体,蕴含着丰富的信息。本文将详细介绍如何利用Python爬虫技术获取淘宝商品评论,包括代码示例和关键步骤解析。

2401_87849335的博客 2835

hdu5338 ZZX and Permutations

hdu5338 ZZX and Permutations 非原创,来自多校题解 不是自己写的,惭愧ing…… 留着以后自己参考…… lower_bound {1,2,4,5} 询问 2,返回的是 2 ,询问3 返回的是 4 是大于等于元素的值 upper_bound {1,2,4,5} 询问2,返回4,询问3,返回4,是 大于元素的值 题意:图论的知识 1 2 3 4 5 6...

weixin_30376163的博客 147

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 258

Android16 动态隐藏systemUI右侧音量条

本文介绍了如何屏蔽SystemUI系统音量条并显示自定义音量控制条的实现方法。主要通过两个步骤:1)在编译脚本中定义控制属性persist.rp.show.volume.dialog=off来隐藏系统音量条;2)修改SystemUI源码中的VolumeDialogImpl.java文件,在showH方法中根据属性值判断是否显示系统音量条。当属性值为off时直接return,从而屏蔽系统音量条的显示,实现自定义音量控制条的替代显示。该方法通过系统属性控制显示状态,具有灵活可控的特点。

tzj1058756809的博客 779

HDU 5338(ZZX and Permutations-用线段树贪心)

ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 888    Accepted Submission(s): 278 Problem Description ZZX likes

nike0good |Oier&ACMer | 熟能生巧 1060

顶刊论文引言用AI怎么写?借助Gemini 3 Pro结合四段式写出逻辑清晰的Introduction

写研究目标时,先明确研究问题,直接回应前文提到的研究缺口,如 “This study aims to investigate whether X modulates Y via the Z pathway in human cells.”然后再提出你的研究假设,当理论依据清晰时,可以用如 “We hypothesized that inhibiting X would rescue Y deficiency in this model.”的句子点出研究目标。要求:1)明确陈述本研究拟解决的核心科学问题;

智能AI让学术科研更容易 181

HDU 5338 ZZX and Permutations 线段树

题目链接:HDU 5338 题意:给一个去掉括号的置换半成品,问如何加括号可以使原序列字典序最大。 思路: 思路很明确 1、肯定是贪心的考虑使靠前位置的尽量大。 2、那么就找从当前位置到之前的右括号之间最大的值与后继进行比较。 括号直接用SET维护就可以了,最大值用线段树维护。比赛的时候SB用线段树维护的右括号位置,幸亏范围小。 代码:#include <cstdio>

alpc_paul的专栏 924

131、高通骁龙影像平台总览:Spectra ISP 各代架构演进与特性对比

摘要:本文深入分析了高通骁龙Spectra ISP从250到780代的架构演进与技术痛点,揭示了各代关键改进与隐藏问题。重点剖析了双ISP带宽分配、AI ISP黑盒决策、温度控制等实战问题,并给出具体解决方案(如寄存器配置、QoS调整等)。文章强调工程师需平衡带宽、功耗与画质的三角关系,建议调试时先关闭AI模块建立基线,关注统计引擎配置,并建立温度监控机制。最后指出理解架构局限比追求完美设计更重要,需要针对不同场景找到合适的妥协方案。(148字)

sundong_81的博客 207

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU - 5338 ZZX and Permutations 线段树 + set

感觉分情况讨论清楚就好啦, 不是很难写。 #include<bits/stdc++.h> #define LL long long #define LD long double #define ull unsigned long long #define fi first #define se second #define mk make_pair #de...

138

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

置换,模拟,优化(HDU 5338,ZZX and Permutations)

理解置换的概念以及题意后,剩下的就是模拟了。 花了挺长时间,主要是模拟有漏洞+想暴力过。 希望自己能养成一个做题目的好习惯,虽然写完代码再来debug能比较稳定地查出错误,但是一旦出现了整体性的解法错误就得推倒重来,这会花掉非常多的时间,希望自己能权衡一下写代码和想明白之间的时间分配,任何基本功都是值得坚持训练的。 代码 #include #include #define

xl2015190026的博客 379

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Hdu 5338 ZZX and Permutations(线段树+贪心)

解析: 首先用set维护被Cirlcle Notation切开的不连续的各个段。 然后从i开始,(p[i]为i的位置) 找到其在set中的左右端点,左边的最大值为value_l,右边p[i]+1的值为value_r。 若value_l>value_r,则{p[value_l],p[value_l]+1,...,p[i] }为一个CircleNotation,并再用set维护剩下的段。 若

Neutralzz的博客 338

hdu 5338 ZZX and Permutations (贪心+线段树+二分)

ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 24    Accepted Submission(s): 2 Problem Description ZZX likes pe

可视化和机器学习 1408

hdu5338 ZZX and Permutations(贪心、线段树)

转载请注明出处:http://www.cnblogs.com/fraud/ ——by fraud ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 181A...

weixin_30247159的博客 210

2015 Multi-University Training Contest 4 hdu 5338 ZZX and Permutations

ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 771Accepted Submission(s): 243 Problem Description ZZX likes ...

weixin_30795127的博客 184

多校第四场 1012 hdu 5338 ZZX and Permutations(线段树+树状数组+贪心)

题目链接:hdu 5338题目大意: 首先我们有一个序列:1,2,…….,n。 我们要读入一个操作序列,这个序列是1~n的一个排列,我们可以通过加括号形成一个循环节,循环节不能嵌套和交叉 循环节内部是后面的换到前面,最前面的换到最后面 问如何将操作序列划分循环,能够将原序列通过转换获得字典序最大的序列 题目分析: 首先我们既然要得到要字典序最大,那么我们可以贪心地从高到低地枚举每一个位,每一位尽量取

llin-黎辰 800
上一篇: 欧拉函数+中国剩余定理
imfuture
博客等级 码龄13年 1粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值