2011-05-28 17:42:33 #include<iostream> #define N 100010 using namespace std; struct Student { int id, kn; bool operator <(Student t) { return kn>t.kn||(kn==t.kn&&id>t.id); } }stu[N]; void SWAP(Student *s1,Student *s2) { Student tmp=*s1; *s1=*s2; *s2=tmp; } void PUSH(int i) { int par; par=i/2; while (par&&stu[par]<stu[i]) {SWAP(stu+par,stu+i); i=par; par=i/2; } } void POP(int n) { int par=1,ls=2,rs=3; stu[1]=stu[n]; while (ls<n) { if(rs>=n) { if(stu[par]<stu[ls]) SWAP(stu+par,stu+ls); return; } else { if(stu[par]<stu[ls]&&stu[rs]<stu[ls]) { SWAP(stu+par,stu+ls); par=ls; ls=par*2; rs=ls+1; } else if(stu[par]<stu[rs]&&stu[ls]<stu[rs]) { SWAP(stu+par,stu+rs); par=rs; ls=par*2; rs=ls+1; } else return ; } } } int main() { int n,i,k,kn; Student tmp; scanf("%d%d",&n,&k); for(i=1;i<=n;i++) { scanf("%d",&stu[i].kn); stu[i].id=i; } for(i=2;i<=n;i++) { PUSH(i); } /* for(int j=1;j<=n;j++) cout<<j<<" "<<stu[j].id<<" "<<stu[j].kn<<endl; */ for(i=0;i<k;i++) { scanf("%d",&kn); tmp=stu[1]; tmp.kn+=kn; POP(n); stu[n]=tmp; PUSH(n); /* for(int j=1;j<=n;j++) cout<<j<<" "<<stu[j].id<<" "<<stu[j].kn<<endl; */// } printf("%d/n",stu[1].id); return 0; }