[bzoj4604] The kth maximum number

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj4604] The kth maximum number相关的知识,希望对你有一定的参考价值。

  暴力可过。。。

  重新看了下快速选择。。

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 using namespace std;
 7 const int maxn=50233;
 8 struct zs{int x,y,num;}b[maxn];
 9 int a[maxn];
10 int i,j,k,n,m,K,cnt;
11  
12 int ra;char rx;
13 inline int read(){
14     rx=getchar(),ra=0;
15     while(rx<0||rx>9)rx=getchar();
16     while(rx>=0&&rx<=9)ra*=10,ra+=rx-48,rx=getchar();return ra;
17 }
18  
19  
20 int getk(int l,int r){//printf("%d--%d\\n",l,r);
21     int i,j,p;
22     for(i=l;i<r;i++)if(a[i]!=a[i+1])break;
23     if(i==r)return a[l];
24     p=l+rand()%(r-l+1),swap(a[l],a[p]);
25     i=l;
26     for(j=i+1;j<=r;j++)
27         if(a[j]<=a[l])i++,swap(a[i],a[j]);
28     swap(a[l],a[i]);
29     if(r-i+1==K)return a[i];else
30     if(r-i+1<K){K-=r-i+1;return getk(l,i-1);}else
31     return getk(i+1,r);
32 }
33 int main(){
34     n=read(),m=read();int id,x,y,x2,y2;srand(233);
35     n=0;
36     for(i=1;i<=m;i++){
37         id=read(),x=read(),y=read();
38         if(id==1)b[++n]=(zs){x,y,read()};else{
39             x2=read(),y2=read(),K=read();
40             cnt=0;
41             for(j=1;j<=n;j++)if(b[j].x>=x&&b[j].x<=x2&&b[j].y>=y&&b[j].y<=y2)
42                 a[++cnt]=b[j].num;
43             if(cnt>=K)
44                 printf("%d\\n",getk(1,cnt));
45             else puts("NAIVE!ORZzyz.");
46         }
47     }
48 }
View Code

 

以上是关于[bzoj4604] The kth maximum number的主要内容,如果未能解决你的问题,请参考以下文章

The kth great number

HDU 4006 The kth great number

The kth great number(set)

The kth great number_优先队列_priority

hdoj 4006 The kth great number(优先队列)

1492. The kth Factor of n