Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1883 Accepted Submission(s): 628
1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<iostream> 6 #include<queue> 7 using namespace std; 8 int cmp(const void*p,const void*q); 9 typedef struct pp 10 { 11 long long x; 12 long long y; 13 bool operator<(const pp&cx)const 14 { 15 return cx.y<y; 16 } 17 } ss; 18 ss a[100002]; 19 long long aa[100002]; 20 int main(void) 21 { 22 long long n,i,j,k,p,q; 23 long long N,M; 24 while(scanf("%lld %lld",&p,&q)!=EOF) 25 { 26 for(i=1; i<=p; i++) 27 { 28 scanf("%lld",&aa[i]); 29 } 30 sort(aa+1,aa+1+p); 31 for(i=0; i<q; i++) 32 { 33 scanf("%lld",&a[i].x); 34 } 35 for(i=0; i<q; i++) 36 { 37 scanf("%lld",&a[i].y); 38 } 39 qsort(a,q,sizeof(ss),cmp); 40 priority_queue<ss>que; 41 int cnt=0; 42 int z=q-1; 43 int flag=0; 44 long long sum=0; 45 for(i=p; i>0; i--) 46 { 47 for(j=z; j>=0; j--) 48 { 49 if(a[j].x>=aa[i]) 50 { 51 que.push(a[j]); 52 } 53 else break; 54 } 55 z=j; 56 if(que.empty()) 57 { 58 flag=1; 59 break; 60 } 61 else 62 { 63 ss kl=que.top(); 64 que.pop(); 65 if(kl.x<aa[i]) 66 { 67 flag=1; 68 break; 69 } 70 else 71 { 72 sum+=kl.y; 73 } 74 } 75 } 76 if(flag) 77 { 78 printf("No\n"); 79 } 80 else printf("%lld\n",sum); 81 } 82 return 0; 83 } 84 85 int cmp(const void*p,const void*q) 86 { 87 ss*nn=(ss*)p; 88 ss*mm=(ss*)q; 89 return nn->x-mm->x; 90 }
原文:http://www.cnblogs.com/zzuli2sjy/p/5147026.html