| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这样也会超时呀,郁闷!!#include<stdio.h>
int a[100001],b[100001],c[100001];
__int64 num;
void merge(int *a,int p,int q,int r)
{
int sa,ea,sb,eb,j=p,i;
sa=p;ea=q-1;sb=q;eb=r;
while(sa<=ea&&sb<=eb)
{
if(a[sa]<=a[sb]){b[j++]=a[sa];sa++;}
else{b[j++]=a[sb];sb++;num+=(q-sa);}
// printf("%d \n",num);
}
while(sa<=ea) b[j++]=a[sa++];
while(sb<=eb) b[j++]=a[sb++];
for(i=p;i<=r;i++) a[i]=b[i];
}
void msort(int*a,int n)
{
int i,j,k,m,n0,seg,lastseg,s0;
n0=n;seg=1;lastseg=1;
while(n0>=2)
{m=n0;
n0/=2;s0=seg*2;
if(m%2==0)
{
for(i=1,j=0;i<=n0;j+=s0,i++)
{
if(i<n0)merge(a,j,j+seg,j+s0-1);
else merge(a,j,j+seg,n-1);
}//for
lastseg=seg+lastseg;
seg=s0;
}//if
else{
for(i=1,j=0;i<=n0;j+=s0,i++)
{
merge(a,j,j+seg,j+s0-1);
}
j=n-lastseg-s0;
merge(a,j,n-lastseg,n-1);
lastseg+=s0;
seg=s0;
}
}
}
int main()
{
int i,j,k,m,n,l,i0;
scanf("%d%d",&n,&m);
for(l=1;l<=n;l++)
scanf("%d",&a[l]);
for(i=1;i<=n;i++)c[i]=a[i];
while(m--)
{
scanf("%d%d%d",&i,&j,&k);
//for(i0=i;i0<=j;i0++)c[i0]=a[i0];
msort(a+i,j-i+1);
printf("%d\n",a[k+i-1]);
for(l=i;l<=j;l++)a[l]=c[l];
}
}
/*
7 63
1 5 2 6 3 7 4
2 5 3
4 4 1
1 7 3
Sample Output
5
6
3
*/
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator