hdu 3743 归并排序
来源:互联网 发布:it培训计划方案 编辑:程序博客网 时间:2024/05/19 05:29
求逆序数题目描述有点问题。归并排序。#include<stdio.h>#define N 1000005int in[N],tmp[N];__int64 s;void merge(int l,int mid,int r){int i,j,k;i=l;j=mid+1;k=1;while(i<=mid&&j<=r){if(in[j]<in[i]){tmp[k++]=in[j];j++;s+=mid-i+1;}else{tmp[k++]=in[i];i++;}}while(i<=mid)tmp[k++]=in[i++];while(j<=r)tmp[k++]=in[j++];k=1;for(i=l;i<=r;i++){in[i]=tmp[k];k++;}}void mergesort(int l,int r){if(l<r){int mid=(l+r)>>1;mergesort(l,mid);mergesort(mid+1,r);merge(l,mid,r);}}int main(){int n,i;while(scanf("%d",&n)!=EOF){s=0;for(i=0;i<n;i++)scanf("%d",&in[i]);mergesort(0,n-1);printf("%I64d\n",s);}return 0;}树状数组加离散化#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 1000005struct node{int x,c;}a[N];int b[N],ans[N],n;int cmp(struct node a,struct node b){return a.c<b.c;}int lowbit(int x){return x&(-x);}void update(int x,int num){while(x){ans[x]+=num;x-=lowbit(x);}}__int64 sum(int x){ __int64 s=0; while(x<=n) { s+=ans[x]; x+=lowbit(x); } return s;}int main(){int i;__int64 s;while(scanf("%d",&n)!=EOF){memset(ans,0,sizeof(ans));for(i=1;i<=n;i++){scanf("%d",&a[i].c);a[i].x=i;}sort(a+1,a+n+1,cmp);for(i=1;i<=n;i++)b[a[i].x]=i;s=0;for(i=1;i<=n;i++){update(b[i],1);s+=sum(b[i])-1;}printf("%I64d\n",s);}return 0;}
0 0
- 归并排序 hdu 3743
- hdu 3743 归并排序
- POJ 2299 && HDU 3743 归并排序
- HDU 3743 Frosh Week (归并排序)
- HDU 3743 归并排序模板题
- HDU 1040 归并排序
- hdu 1394 归并排序
- HDU 5270 归并排序
- 归并排序题目整理归并(hdu)
- hdu 4911 Inversion (归并排序)
- HDU 3743 Frosh Week 【归并排序模板题】
- hdu 3743 Frosh Week (归并排序·逆序数)
- HDU 1394 线段树 || 归并排序
- hdu 1394 Minimum Inversion Number_归并排序
- hdu 4911 归并排序求逆序数
- HDU 4911 归并排序题目解析
- HDU 1379 DNA Sorting (水归并排序)
- Hdu 4911 Inversion(裸归并排序)
- HTTP请求头详解
- ym——对象序列化(新)
- fzu Problem 2129 子序列个数
- Leetcode【23】:Swap Nodes in Pairs
- 数据挖掘
- hdu 3743 归并排序
- vi文本编辑器
- ASCII,Unicode和UTF-8
- mongoDB2.6,java使用详解
- hdu 1328
- ubuntu下PIL无法显示图片
- 骆驼命名法,帕斯卡命名法和匈牙利命名法
- 如何防止SQL注入
- JavaScript-表单处理(3)