Codeup墓地-1098

Codeup墓地-1098
src:http://codeup.cn/problem.php?id=1098

1098: 最少的交换
时间限制: 1 Sec 内存限制: 32 MB
题目描述
现在给你一个由n个互不相同的整数组成的序列,现在要求你任意交换相邻的两个数字,使序列成为升序序列,请问最少的交换次数是多少?
输入
输入包含多组测试数据。每组输入第一行是一个正整数n(n<500000),表示序列的长度,当n=0时。
接下来的n行,每行一个整数a[i](0<=a[i]<=999999999),表示序列中第i个元素。
输出
对于每组输入,输出使得所给序列升序的最少交换次数。
样例输入
5
9
1
0
5
4
3
1
2
3
0
样例输出
6
0

//归并排序,结果A也是从小到大排好序的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> A;
int N;

ll merge_count(vector<int> &a){
    int n=a.size();
    if(n<=1){
        return 0;
    }
    ll cnt =0;
    vector<int> b(a.begin(),a.begin()+n/2);
    vector<int> c(a.begin()+n/2,a.end());
    cnt+=merge_count(b);
    cnt+=merge_count(c);
    //此时b和c已经分别排好序了
    int ai=0,bi=0,ci=0;
    //合并两部分并计算逆序数
    while(ai<n){
        if(bi<b.size()&&(ci==c.size()||b[bi]<=c[ci])){
            a[ai++]=b[bi++];
        }
        else{
            //逆序数计算
            //如若bi>ci,则这在B序列中从bi开始到结束的数都比ci大
            //这些数的数量为n/2-bi
            cnt+=n/2-bi;
            a[ai++]=c[ci++];
        }
    }
    return cnt;
}

int main(){
    int c;
    while(cin>>N&&N){
        for(int i=0;i<N;i++){
            scanf("%d",&c);
            A.push_back(c);
        }
        printf("%lld\n",merge_count(A));
        A.clear();
    }
    return 0;
}
对于javaweb墓地管理系统,我可以为您提供一些介绍和演示。 墓地管理系统是一个用于管理和维护墓地信息的系统。它可以帮助管理者记录和查询墓地的基本信息,包括墓地位置、墓主人信息、墓地状态等。此外,墓地管理系统还可以提供一些额外的功能,如墓地预订、墓地维护、墓地费用管理等。 在JavaWeb开发中,可以使用Java语言和相关的技术来实现墓地管理系统。以下是一个简单的演示示例: 1. 数据库设计:首先,需要设计一个数据库来存储墓地信息。可以创建一个名为"graveyard"的数据库,并在其中创建一个名为"grave"的表,用于存储墓地信息。 2. 后端开发:使用Java语言和JavaWeb框架(如Spring MVC)来开发后端代码。可以创建一个名为"GraveController"的控制器类,用于处理墓地相关的请求。在该控制器中,可以实现一些方法,如添加墓地、查询墓地、修改墓地信息等。 3. 前端开发:使用HTML、CSS和JavaScript等前端技术来开发用户界面。可以创建一个名为"grave.jsp"的JSP页面,用于展示墓地信息和提供相关操作。在该页面中,可以使用表格来展示墓地列表,并提供一些按钮和表单来进行墓地的添加、查询和修改等操作。 4. 数据库连接:使用JDBC或者ORM框架(如MyBatis)来连接数据库,并实现数据的增删改查操作。可以在后端代码中编写相应的数据库连接和操作代码,以实现与数据库的交互。 5. 部署和测试:将开发好的代码部署到JavaWeb服务器(如Tomcat)上,并进行测试。可以通过访问相应的URL来测试墓地管理系统的功能,如添加墓地、查询墓地等。 这只是一个简单的示例,实际的墓地管理系统可能还涉及到其他功能和技术。希望这个演示能够帮助您对javaweb墓地管理系统有一个初步的了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值