hdu 5775

题意:给出一个序列,根据冒泡算法,问数字1-N,他能到的最右边和最左边长度。

思路:他能到达的最左边即min(当前在的位置,排序后的位置),最右边即右边有几个比他小的,可用树状数组

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4
 5 int t;
 6 int n;
 7 int a[N],f[N];
 8 int l[N],r[N];
 9
10 void add(int k,int num){
11     while(k<=n){
12         f[k]+=num;
13         k+=k&-k;
14     }
15 }
16
17 int getsum(int k){
18     int sum=0;
19     while(k){
20         sum+=f[k];
21         k-=k&-k;
22     }
23     return sum;
24 }
25
26 int main(){
27     scanf("%d",&t);
28     int k=1;
29     while(t--){
30         scanf("%d",&n);
31         int Max=0,Min=1e9+7;
32         memset(f,0,sizeof(f));
33         for(int i=1;i<=n;i++){
34             scanf("%d",&a[i]);
35             Max=max(Max,a[i]);
36             Min=min(Min,a[i]);
37             l[a[i]]=i;
38         }
39         for(int i=n;i>=1;i--){
40             r[a[i]]=i+getsum(a[i])-getsum(Min-1);
41             add(a[i],1);
42         }
43         sort(a+1,a+n+1);
44         for(int i=1;i<=n;i++){
45             l[a[i]]=min(l[a[i]],i);
46         }
47         printf("Case #%d:",k++);
48         for(int i=1;i<=n;i++){
49              //  cout<<l[i]<<" "<<r[i]<<endl;
50             printf(" %d",r[i]-l[i]);
51         }
52         printf("\n");
53     }
54 }
时间: 2024-10-13 04:55:20

hdu 5775的相关文章

HDU 5775 Bubble Sort(冒泡排序)

HDU 5775 Bubble Sort(冒泡排序) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   Problem Description - 题目描述 P is a permutation of the integers from 1 to N(index starting from 1).Here is the code of Bubble Sort in C++.

HDU 5775 Bubble Sort(树状数组)

题目链接:HDU 5775 题面: Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 709    Accepted Submission(s): 418 Problem Description P is a permutation of the integers from 1 to N(index startin

HDU 5775:Bubble Sort(树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=5775 Bubble Sort Problem Description P is a permutation of the integers from 1 to N(index starting from 1).Here is the code of Bubble Sort in C++. for(int i=1;i<=N;++i) for(int j=N,t;j>i;—j) if(P[j-1] > P

hdu 5775 Bubble Sort(2016 Multi-University Training Contest 4——树状数组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5775 Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 636    Accepted Submission(s): 378 Problem Description P is a permutation of the

【归并排序】【逆序数】HDU 5775 Bubble Sort

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 题目大意: 冒泡排序的规则如下,一开始给定1~n的一个排列,求每个数字在排序过程中出现的最远端位置的差. for(int i=1;i<=N;++i) for(int j=N,t;j>i;—j) if(P[j-1] > P[j]) t=P[j],P[j]=P[j-1],P[j-1]=t; 题目思路: [归并排序][逆序数] 首先,一个数左移次数和右移次数时确定的(左边比它大的个数和右边

hdu 5775 Bubble Sort 树状数组+冒泡排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5775 [题意]按照题目的冒泡排序求每个数在排序过程中到达最右边位置与最左边位置之差. [解题思路]考虑i位置上的数字a[i]在冒泡排序过程的变化情况.a[i]会被其后面比a[i]小的数字各交换一次,之后a[i]就会只向前移动.数组从右向左扫,树状数组维护一下得到每个值右边有多少个比其小的值,加上原位置得到最右位置,最左位置为初始位置和最终位置的最小值. [时间复杂度]O(n lg n)O(n\ lg

HDU - 5775 Bubble Sort

P is a permutation of the integers from 1 to N(index starting from 1). Here is the code of Bubble Sort in C++. for(int i=1;i<=N;++i) for(int j=N,t;j>i;-j) if(P[j-1] > P[j]) t=P[j],P[j]=P[j-1],P[j-1]=t; After the sort, the array is in increasing o

HDU 5775 树状数组

Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 853    Accepted Submission(s): 504 Problem Description P is a permutation of the integers from 1 to N(index starting from 1).Here is t

hdu 5775 Bubble Sort (树状数组)

Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 591    Accepted Submission(s): 359 Problem Description P is a permutation of the integers from 1 to N(index starting from 1).Here is t

HDU 5775 L - Bubble Sort 树状数组

给定一段冒泡排序的代码,要求输出每个数字能到达的最右边的位置和最左边的位置的差 因为那段冒泡排序的代码是每次选取一个最小的数,放在左边的,所以,每个数最多能到达右边的位置应该是起始位置i+右边有多少个数比它大. 它能到达的最左的位置,可以这样考虑 1.它本来应该是排去起始位置的左边的,就是它本来是一个小的数字,起始位置在末尾这种情况的话.最左边的值就是a[i] 2.它是去右边的,那么最左边的值就是起始位置, 两种取max就去可以了 #include <cstdio> #include <