| ||||||||||
| 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 | |||||||||
用mergesort(index)-->O( nlog(n)+m*n ) 怀着面对TLE的心情,迎来的却是WA!。。点解?。#include<iostream>
using namespace std;
int n,m;
int num[100001];
int id[100001];
int from[5001];
int to[5001];
int k[5001];
int L[50001];
int Li[50001];
int R[50001];
int Ri[50001];
void merge(int start,int h,int end)
{
int nl=h-start+1;
int nr=end-h;
int i,j;
for(i=1;i<=nl;++i){ L[i]=num[start+i-1]; Li[i]=id[start+i-1]; }
for(j=1;j<=nr;++j){ R[j]=num[h+j]; Ri[j]=id[h+j]; }
L[nl+1]=1e9+1;
R[nr+1]=1e9+1;
//cout<<"L[i]"<<L[nl+1]<<endl;
int kk;
i=1;j=1;
for(kk=start;kk<=end;++kk)
{
if(L[i]<=R[j]){ id[kk]=Li[i]; num[kk]=L[i++]; }
else { id[kk]=Ri[j]; num[kk]=R[j++]; }
}
}
void mergesort(int start,int end)
{
if(start<end)
{
int h=(start+end)/2;
mergesort(start,h);
mergesort(h+1,end);
merge(start,h,end);
}
}
int main()
{
scanf("%d %d",&n,&m);
int i,j;
for(i=1;i<=n;++i)scanf("%d",&num[i]);
for(i=1;i<=n;++i)id[i]=i;
mergesort(1,n);
//for(i=1;i<=n;++i)printf("%d ",num[i]);printf("\n");
//for(i=1;i<=n;++i)printf("%d ",id[i]);printf("\n");
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&from[i],&to[i],&k[i]);
int t=0;
for(j=1;j<=n;++j)
{
if(from[i]<=id[j] && id[j]<=to[i])++t;
if(t==k[i])break;
}
printf("%d\n",j);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator