码迷,mamicode.com
首页 > 其他好文 > 详细

[bzoj4604] The kth maximum number

时间:2016-06-18 18:39:01      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

  暴力可过。。。

  重新看了下快速选择。。

技术分享
 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

标签:

原文地址:http://www.cnblogs.com/czllgzmzl/p/5596495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!