zoukankan      html  css  js  c++  java
  • agc014F Strange Sorting

    这套题比较简单,以为自己能够独立A掉D和E,或许就能自己A掉F,看来还真是想多了

    题意:给一个$n$的全排列,每次操作把$max(a[1],a[2],...,a[i]) = a[i]$的记为$high$,其他记为$low$,然后把$high$的放到最后

    问要进行多少次操作可以得到$1,2,...,n$

    $n leq 2*10^5$

    反正这种题我永远做不起,即使我推再久也找不到规律

    我就不翻译题解了,给一个别人翻译的题解的链接:https://blog.csdn.net/wxh010910/article/details/71305939

    //Serene
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define ll long long
    #define db double
    #define For(i,a,b) for(int i=(a);i<=(b);++i)
    #define Rep(i,a,b) for(int i=(a);i>=(b);--i)
    const int maxn=2e5+7;
    int n,a[maxn],p[maxn],T[maxn],f[maxn];
    
    char cc;ll ff;
    template<typename T>void read(T& aa) {
    	aa=0;ff=1; cc=getchar();
    	while(cc!='-'&&(cc<'0'||cc>'9')) cc=getchar();
    	if(cc=='-') ff=-1,cc=getchar();
    	while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
    	aa*=ff;
    }
    
    bool is_cyclic(int a,int b,int c) {
    	return (a<b&&b<c)||(b<c&&c<a)||(c<a&&a<b);
    }
    
    int main() {
    	read(n);
    	For(i,1,n) read(a[i]);
    	For(i,1,n) p[a[i]]=i;
    	Rep(i,n-1,1) {
    		if(T[i+1]==0) {
    			if(p[i]>p[i+1]) T[i]=1,f[i]=i+1;
    		}
    		else {
    			if(is_cyclic(p[f[i+1]],p[i],p[i+1])) T[i]=T[i+1],f[i]=f[i+1];
    			else T[i]=T[i+1]+1,f[i]=i+1;
    		}
    	}
    	printf("%d
    ",T[1]);
    	return 0;
    }
    
  • 相关阅读:
    MySQL
    LeetCode
    数据结构
    我的编程幻想曲,更新中
    快速排序
    C与C++的区别
    必须要使用列表初始化的几种情况
    析构中delete this
    指向自身类型的成员指针的初始化,this不属于类对象的一部分
    构造函数
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/9111204.html
Copyright © 2011-2022 走看看