POJ训练计划2299_Ultra-QuickSort(线段树/单点更新)
来源:互联网 发布:荧光作图软件下载 编辑:程序博客网 时间:2024/05/16 17:52
解题报告
题意:
求逆序数。
思路:
线段树离散化处理。
#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#define LL long longusing namespace std;LL sum[2001000],num[501000],_hash[501000];void push_up(int rt){ sum[rt]=sum[rt*2]+sum[rt*2+1];}void update(int rt,int l,int r,int p,LL v){ if(l==r) { sum[rt]=+v; return; } int mid=(l+r)/2; if(p<=mid)update(rt*2,l,mid,p,v); else update(rt*2+1,mid+1,r,p,v); push_up(rt);}LL q_sum(int rt,int l,int r,int ql,int qr){ if(ql>r||qr<l)return 0; if(ql<=l&&r<=qr)return sum[rt]; int mid=(l+r)/2; return q_sum(rt*2,l,mid,ql,qr)+q_sum(rt*2+1,mid+1,r,ql,qr);}int main(){ int n,i,j; while(~scanf("%d",&n)) { LL ans=0; if(!n)break; memset(_hash,0,sizeof(_hash)); memset(num,0,sizeof(num)); memset(sum,0,sizeof(sum)); for(i=0; i<n; i++) { scanf("%LLd",&num[i]); _hash[i]=num[i]; } sort(_hash,_hash+n); int m=unique(_hash,_hash+n)-_hash; for(i=0; i<n; i++) { int t=lower_bound(_hash,_hash+m,num[i])-_hash+1; ans+=q_sum(1,1,m,t+1,m); update(1,1,m,t,1); } printf("%lld\n",ans); } return 0;}
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 41278 Accepted: 14952
Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
59105431230
Sample Output
60
Source
Waterloo local 2005.02.05
0 0
- POJ训练计划2299_Ultra-QuickSort(线段树/单点更新)
- POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
- POJ训练计划2828_Buy Tickets(线段树/单点更新)
- POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)
- poj 2299 Ultra-QuickSort 【线段树求和(点更新)】
- poj 2886(线段树单点更新)
- poj 2828 线段树单点更新
- POJ 2481 Cows(线段树[单点更新])
- POJ 2828(线段树 单点更新)
- POJ 2886 线段树单点更新+数论
- POJ 2352 线段树(单点更新)
- poj 2828 线段树 单点更新
- poj 2886 线段树 单点更新
- 【poj】2481 Cows【线段树单点更新】
- POJ 2828 (线段树-单点更新)
- POJ 2828 线段树单点更新
- poj 2828(线段树单点更新)
- poj 2828 线段树+单点更新
- 二姨和
- Spring MVC视图的呈现
- iOS7最佳实践:一个天气App案例
- android.intent.action.MAIN 和android.intent.category.
- 模式匹配算法
- POJ训练计划2299_Ultra-QuickSort(线段树/单点更新)
- 按考生及法国卡规划和供货商和管理老公回来受够了
- HDU 4932 Miaomiao's Geometry(推理)
- 在炼数成金报名的课程!加油!
- 去空间问题和港口股份可公开化工物流和高科技法攻击而公开
- 用单链表结构实现算法2.2的程序
- Tyvj 水题begin 求一个正整数位数的常用方法
- HTML 设计一点方法
- MKNetworkKit 简单实例