逆序对
1688 求逆序对
测试通过 Accepted
总耗时: 525 ms
0 / 0 数据通过测试.
最近的错误点信息
运行结果
测试点#deseq0.in 结果: 内存使用量: 1772kB 时间使用量: 84ms 测试点#deseq1.in 结果: 内存使用量: 128kB 时间使用量: 1ms 测试点#deseq2.in 结果: 内存使用量: 256kB 时间使用量: 1ms 测试点#deseq3.in 结果: 内存使用量: 360kB 时间使用量: 10ms 测试点#deseq4.in 结果: 内存使用量: 1768kB 时间使用量: 64ms 测试点#deseq5.in 结果: 内存使用量: 1768kB 时间使用量: 63ms 测试点#deseq6.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq7.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq8.in 结果: 内存使用量: 1772kB 时间使用量: 82ms 测试点#deseq9.in 结果: 内存使用量: 1768kB 时间使用量: 80ms
错误error
测试点#deseq0.in 结果: 内存使用量: 1772kB 时间使用量: 84ms 测试点#deseq1.in 结果: 内存使用量: 128kB 时间使用量: 1ms 测试点#deseq2.in 结果: 内存使用量: 256kB 时间使用量: 1ms 测试点#deseq3.in 结果: 内存使用量: 360kB 时间使用量: 10ms 测试点#deseq4.in 结果: 内存使用量: 1768kB 时间使用量: 64ms 测试点#deseq5.in 结果: 内存使用量: 1768kB 时间使用量: 63ms 测试点#deseq6.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq7.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq8.in 结果: 内存使用量: 1772kB 时间使用量: 82ms 测试点#deseq9.in 结果: 内存使用量: 1768kB 时间使用量: 80ms
错误信息
测试点#deseq0.in 结果: 内存使用量: 1772kB 时间使用量: 84ms 测试点#deseq1.in 结果: 内存使用量: 128kB 时间使用量: 1ms 测试点#deseq2.in 结果: 内存使用量: 256kB 时间使用量: 1ms 测试点#deseq3.in 结果: 内存使用量: 360kB 时间使用量: 10ms 测试点#deseq4.in 结果: 内存使用量: 1768kB 时间使用量: 64ms 测试点#deseq5.in 结果: 内存使用量: 1768kB 时间使用量: 63ms 测试点#deseq6.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq7.in 结果: 内存使用量: 1768kB 时间使用量: 70ms 测试点#deseq8.in 结果: 内存使用量: 1772kB 时间使用量: 82ms 测试点#deseq9.in 结果: 内存使用量: 1768kB 时间使用量: 80ms
题目描述 Description
给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目
数据范围:N<=105。Ai<=105。时间限制为1s。
输入描述 Input Description
第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。
输出描述 Output Description
所有逆序对总数.
样例输入 Sample Input
4
3
2
3
2
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
1 #include<iostream>//逆序对 2 #include<cstring> 3 using namespace std; 4 long long int a[1000001]; 5 long long int tot; 6 long long int n; 7 long long int ans[1000001]; 8 long long int now; 9 void f(long long int s,long long int t) 10 { 11 if(s==t)return; 12 int mid=(s+t)/2; 13 f(s,mid); 14 f(mid+1,t);//递归调用 15 long long int i=s; 16 long long int j=mid+1; 17 now=s; 18 while(i<=mid&&j<=t) 19 { 20 if(a[i]<=a[j])//前半段小于后半段 21 ans[now++]=a[i++];//ans数组用于存储当前答案 22 else 23 { 24 tot+=mid-i+1;//后半段大,将前段剩余部分加入答案 25 ans[now++]=a[j++];//将后半段存入 26 } 27 } 28 while(i<=mid)//此while&&下while将多出的部分存入ans 29 ans[now++]=a[i++]; 30 while(j<=t) 31 ans[now++]=a[j++]; 32 for (i=s;i<=t;i++)//将ans存入a 33 a[i] = ans[i]; 34 } 35 int main() 36 { 37 long long int n; 38 cin>>n; 39 for(int i=1;i<=n;i++) 40 cin>>a[i]; 41 f(1,n); 42 cout<<tot; 43 return 0; 44 }