首页 > 其他分享 >补基础题(排序)

补基础题(排序)

时间:2024-02-11 12:01:02浏览次数:26  
标签:tmp int ll 基础 mid ++ ans 排序

2299 -- Ultra-QuickSort (poj.org)

#include<iostream>//归并排序 
#include<cstring>
using namespace std;
typedef long long ll;
const int N=500010;
int a[N],tmp[N],ans;
void merge_(ll l,ll mid,ll r){
    int i=l,j=mid+1,t=0;
    while(i<=mid&&j<=r){
        if(a[i]>a[j]){
            tmp[t++]=a[j++];
            ans+=mid-i+1;
        }else tmp[t++]=a[i++];
    }
    while(i<=mid) tmp[t++]=a[i++];
    while(j<=r) tmp[t++]=a[j++];
    for(int i=0;i<t;i++) a[l+i]=tmp[i];
}
void mergesort(ll l,ll r){
    if(l<r){
        ll mid=(l+r)>>1;
        mergesort(l,mid);
        mergesort(mid+1,r);
        merge_(l,mid,r);
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    while(cin>>n && n!=0){
        memset(a,0,sizeof(a));
        ans=0;
        for(int i=0;i<n;i++) cin>>a[i];
        mergesort(0,n-1);
        cout<<ans<<endl;
    }    
    return 0;
}

2388 -- Who's in the Middle (poj.org)

#include<iostream>//找中间数 
using namespace std;
const int N=10010;
int data[N];
#define swap(a,b){int tmp=a;a=b;b=tmp;}
int partition(int left,int right){
    int i=left;
    int tmp=data[right];
    for(int j=left;j<right;j++){
        if(data[j]<tmp){
            swap(data[j],data[i]);
            i++;
        }
    }
    swap(data[i],data[right]);
    return i;
}
void quicksort(int left,int right){
    if(left<right){
        int i=partition(left,right);
        partition(left,i-1);
        partition(i+1,right);
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>data[i];    
    quicksort(1,n);
    cout<<data[(n+1)/2]<<endl;;
    
    return 0;
}

hdu账号莫名用不了,用洛谷的题平替一下,仅用修改一步,即可通过

P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<iostream>//归并排序 
#include<cstring>
using namespace std;
typedef long long ll;
const int N=500010;
ll a[N],tmp[N],ans;
void merge_(ll l,ll mid,ll r){
    ll i=l,j=mid+1,t=0;
    while(i<=mid&&j<=r){
        if(a[i]>a[j]){
            tmp[t++]=a[j++];
            ans+=mid-i+1;
        }else tmp[t++]=a[i++];
    }
    while(i<=mid) tmp[t++]=a[i++];
    while(j<=r) tmp[t++]=a[j++];
    for(int i=0;i<t;i++) a[l+i]=tmp[i];
}
void mergesort(ll l,ll r){
    if(l<r){
        ll mid=(l+r)>>1;
        mergesort(l,mid);
        mergesort(mid+1,r);
        merge_(l,mid,r);
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    memset(a,0,sizeof(a));
    ans=0;
    for(int i=0;i<n;i++) cin>>a[i];
    mergesort(0,n-1);
    cout<<ans<<endl;

    return 0;
}

hdu账号早日回归希望!

标签:tmp,int,ll,基础,mid,++,ans,排序
From: https://www.cnblogs.com/accbulb/p/18013302

相关文章

  • Go语言的常用基础
    1、核心特性Go语言有一些让人影响深刻的核心特性核心特性,比如:以消息传递模式的并发、独特的_符号、defer、函数和方法、值传递等等,可以查看这篇文章《Go语言-让我印象深刻的13个特性》。首先要记住一些核心特性的用法。1.1、Goroutine协程:独立的栈空间,共享堆空间,比线程更轻量......
  • 中小企业IT基础设施要不要上Kubernetes
    中小企业IT基础设施在要不要上Kubernetes?相信你肯定有这样的疑问,先说我的结论:根据我在主导中小企业上云过程的综合实践,建议直接上kubernetes。概况我主导的上云企业研发情况概况:研发人员30人左右,云上费用规模100万左右,项目工程数80个左右,占用k8spod数量300左右,QPS-300多。在上......
  • 补基础题(贪心-1)
    Problem-2037(hdu.edu.cn)#include<iostream>/*活动安排的贪心问题*/#include<algorithm>usingnamespacestd;constintN=110;intn;structnode{intbegin,end;};boolcmp(nodeaa,nodebb){returnaa.end<bb.end;}signedmain(){ios::......
  • Spring 基础
    Spring基础参考资料Spring的核心包括2个概念:控制反转(IOC)和面向切面(AOP)。我的SpringBoot学习之路!-知乎(zhihu.com)控制反转(IOC)的核心思想:把主动权交给用户。狂神说Java:《Spring5最新完整教程IDEA版》《SpringBoot最新教程IDEA版》开源项目:Spr......
  • Qt6.0开发 第二章 GUI程序设计基础
    第二章GUI程序设计基础窗口相关文件按照第一章所给提示创建一个新project,我们得到了下面的代码:widget.h:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{......
  • chapter3-排序和查找
    1.排序排序就是把一组无序的数据变成有序的过程。对于机试而言,直接使用C++封装好的sort函数就可以了。sort函数内部采用快速排序实现,因此非常高效。使用sort函数,需要引用#include<algorithm>头文件,sort(first_address,last_address,compare)有三个参数,first和last待排序序列的......
  • 力扣递归 两道简单题合成一道中等题之148. 排序链表
    递归归并排序,先找到终点,再合并两个链表 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]/** *Definitionforsingl......
  • python基础复习
    四大数据类型1.列表(List)列表是有序的集合,可以包含任意类型的对象:数字、字符串甚至其他列表。列表是可变的(Mutable),意味着可以在创建后添加、移除或改变元素。使用方括号[]定义,元素之间用逗号,分隔。示例:my_list=[1,"Hello",3.14,[2,4,6]]2.元组(Tuple)元组也是有......
  • 零基础入门Vue之拘元遣将——其他常用指令&自定义指令
    回首在零基础入门Vue之梦开始的地方——插值语法我记录了v-bind、v-on、v-model的学习在零基础入门Vue之Tobeornottobe——条件渲染我记录了v-if、v-else-if、v-else、v-show的学习在零基础入门Vue之影分身之术——列表渲染&渲染原理浅析我记录了v-for的学习为了推......
  • 通达信竞开强度排序指标公式源码
    {股票指标}今开:(OPEN/REF(CLOSE,1)-1)*100,NODRAW;创业板:=IF(CODELIKE('300'),1,0);排除一字:=REF((((今开<9.8ANDNOT(创业板))OR(今开<19.5AND创业板))=0),0);涨停创:=IF(C>1.1990*REF(C,1)ANDC=H,1,0);涨停主:=IF(C>1.09*REF(C,1)ANDC=H,1,0);涨停数:=(涨......