首页 > 其他分享 >1101 Quick Sort

1101 Quick Sort

时间:2022-11-19 02:11:06浏览次数:39  
标签:Sort long than result 1101 Quick pivot line its

There is a classical process named partition in the famous quick sort algorithm. In this process we typically choose one element as the pivot. Then the elements less than the pivot are moved to its left and those larger than the pivot to its right. Given N distinct positive integers after a run of partition, could you tell how many elements could be the selected pivot for this partition?

For example, given N=5 and the numbers 1, 3, 2, 4, and 5. We have:

  • 1 could be the pivot since there is no element to its left and all the elements to its right are larger than it;
  • 3 must not be the pivot since although all the elements to its left are smaller, the number 2 to its right is less than it as well;
  • 2 must not be the pivot since although all the elements to its right are larger, the number 3 to its left is larger than it as well;
  • and for the similar reason, 4 and 5 could also be the pivot.

Hence in total there are 3 pivot candidates.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤105). Then the next line contains N distinct positive integers no larger than 109. The numbers in a line are separated by spaces.

Output Specification:

For each test case, output in the first line the number of pivot candidates. Then in the next line print these candidates in increasing order. There must be exactly 1 space between two adjacent numbers, and no extra space at the end of each line.

Sample Input:

5
1 3 2 4 5
 

Sample Output:

3
1 4 5

#include<stdio.h>
#include<vector>

using namespace std;

long long n[100001];
bool flag[100001];
vector<long long> result;
 long long leftnum[100001];
 long long rightnum[100001];
int main()
{
    int num;
    scanf("%d",&num);
    for(int i=0;i<num;i++)
    {
        long long temp;
        scanf("%lld",&temp);
        n[i]=temp; 
    } 

    for(int t=num-1;t>=0;t--)
    {
        if(t==num-1) 
        {
            rightnum[t]=n[t];
            flag[t]=true;
         } 
         else
         {
             if(n[t]<rightnum[t+1])
             {
                 flag[t]=true;
                 rightnum[t]=n[t];
             }
             else
             {
                 rightnum[t]=rightnum[t+1];
             }
         }
    }
    for(int j=0;j<num;j++)
    {
        if(j==0) 
        {
            leftnum[j]=n[j];
            if(flag[j]==true) 
            {
                result.push_back(n[j]);
            }
        }
        else
        {
            if(n[j]>leftnum[j-1])
            {
                
                if(flag[j]==true)
                {
                    
                result.push_back(n[j]);
                } 
                leftnum[j]=n[j];
            }
            else
            {
                leftnum[j]=leftnum[j-1];
            }
        }
    }

    printf("%d\n",result.size());
    for(vector<long long>::iterator it=result.begin();it!=result.end();it++)
    {
    
            if(it!=result.end()-1)
            {
                    printf("%lld ",*it);
            }
            else
            {
                    printf("%lld",*it);
            }
    }    
    printf("\n");
}
    

 



标签:Sort,long,than,result,1101,Quick,pivot,line,its
From: https://www.cnblogs.com/zzzlight/p/16905357.html

相关文章

  • SelectSortDoWhile
    packagecom.challenger;importcom.challenger.Util;publicclassSelectSortDoWhile{   publicstaticvoidmain(String[]args)   {       //define......
  • SelectSortWhile
    publicclassSelectSortWhile{   publicstaticvoidmain(String[]args)   {       //definearray       int[]arr={5,8,2,3,7,4,10,6,9,1};......
  • STL 源码剖析:sort
    概览我大抵是太闲了。此文章同步发表于我的知乎。sort作为最常用的STL之一,大多数人对于其了解仅限于快速排序。听说其内部实现还包括插入排序和堆排序,于是很好奇,决......
  • 【BOI2007】Ranklist Sorting
    【BOI2007】RanklistSortingDescription有一个长为\(n\)的排列\(p\)每次可以选两个位置\(i,j\),然后将\(p_i\)放到\(j\)的位置上,代价为\(i+j\)求将排列变为降序的最小......
  • [JavaScript]自定义排序方式Array.sort
    自定义排序方式,通过array.sort//按助力值、绑定时间排序。return<0:a在前,return>0:a在后,return==0:不变list.sort(function(a,b){varref=0if(a.bi......
  • sort
    packagecom.challenger;importcom.challenger.Util;publicclassSelectSort{   publicstaticvoidmain(String[]args)   {       int[]arr={5,8,6,......
  • 1710. 卡车上的最大单元数 ----- 贪心算法,自定义sort排序
    请你将一些箱子装在一辆卡车上。给你一个二维数组boxTypes,其中boxTypes[i]=[numberOfBoxesi,numberOfUnitsPerBoxi]:numberOfBoxesi是类型i的箱子的数量。numb......
  • Minimum Number of Operations to Sort a Binary Tree by Level
    MinimumNumberofOperationstoSortaBinaryTreebyLevelYouaregiventhe root ofabinarytreewithuniquevalues.Inoneoperation,youcanchooseany......
  • C++中sort函数、1.4最长公共子串
    sort()即为用来排序的函数,它根据具体情况使用不同的排序方法,效率较高。sort在实现时避免了经典快速排序中可能出现的会导致实际复杂度退化到O(n2)的极端情况。使用sort()......
  • 75.Sort Colors
    Givenanarraywith n objectscoloredred,whiteorblue,sortthemsothatobjectsofthesamecolorareadjacent,withthecolorsintheorderred,white......