[POJ1804]Brainman
来源:互联网 发布:java 余弦相似度算法 编辑:程序博客网 时间:2024/05/17 03:37
假如我们要尽量少的次数交换元素 那么我们每次交换逆序对数一定是最优的 只有这样才能尽可能的去掉逆序对数的数量
因此就是求逆序对数
原谅我不会动态内存……只拿了G++里的第二 不过好歹混到第一页了
#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<cstring>#include<set>#include<cstring>#include<iomanip>#define mid ((l+r)>>1)#define debug(x) cerr<<#x<<"="<<x<<endlusing namespace std;typedef pair<int,int> pii;const int INF = 0x7f7f7f7f;const double pi=acos(-1.0);int a[1001],ans=0;int temp[1001];inline int init(){int now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}}void Mergesort(int l,int r){int pointer=l;int i=l,j=mid+1;while(i<=mid&&j<=r){if(a[i]>a[j]){temp[pointer++]=a[j++];ans+=(mid-i+1);}else{temp[pointer++]=a[i++];}}while(i<=mid){temp[pointer++]=a[i++];}while(j<=r){temp[pointer++]=a[j++];}for(int k=l;k<=r;k++){a[k]=temp[k];}return;}void Merge(int l,int r){if(l<r){Merge(l,mid);Merge(mid+1,r);Mergesort(l,r);}}int main(){int cas;short int n;cas=init();for(int i=1;i<=cas;i++){ans=0;n=init();memset(temp,0,sizeof(temp));for(int j=1;j<=n;j++){a[j]=init();}Merge(1,n);printf("Scenario #%d:\n%d\n\n",i,ans);}return 0;}
0 0
- POJ1804 Brainman
- 【poj1804】 Brainman
- POJ1804-Brainman
- [POJ1804]Brainman
- A计划---POJ1804 Brainman
- POJ1804 Brainman (逆序对)
- POJ1804-Brainman(归并排序求逆序数)
- poj1804 Brainman 归并排序求逆序对
- POJ1804《Brainman》方法:归并排序找逆序数
- poj1804
- poj1804
- POJ1804
- POJ1804
- poj1804
- poj1804
- 归并排序与逆序对问题---(解题报告)POJ1804---Brainman
- Brainman
- Brainman
- Android NDK一键编译
- 利用HttpClient发送post请求京东接口并将结果用POI导出为 Excel表格
- Android设计模式之观察者模式
- Oracle中激活scott账号
- Eclipse webservice client 调用 .net接口
- [POJ1804]Brainman
- 谁占用了我的Buffer Pool?
- api.js源码阅读学习笔记
- 关于mysql 一系列操作
- 标准模板库1(STL)——基本概念
- 在HTMl文档中使用CSS
- Oracle学习第二记
- Functions
- js事件的分类和阻止冒泡事件