soj3102 O(n)求第k小的数

2015-07-20 17:05:43 · 作者: · 浏览: 3

原本觉得挺简单的,开始就一直RE,后来还T。。发现是服务器可能出问题了,老化了,时间变慢了,拿以前A掉的代码来都是T。

不过还是有快的方法的。

就是位运算。另外stl里也有现成的函数可以用nth_element(s,s+k-1,s+n);

但是还有一个问题,nth_element()换成自己写的就T。。无语了。。

?

?

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
          
            #include
           
             #include
            
              #include
              #define read freopen(q.in,r,stdin) #define write freopen(q.out,w,stdout) using namespace std; int x[2000006],f[2000]; char s[22000006]; int n,k; int main() { // read; memset(f,0,sizeof(f)); for(int i='0';i<='9';i++)f[i]=1; while(~scanf(%d%d,&n,&k)) { getchar(); int i,j=0,cnt=0; memset(x,0,sizeof(x)); gets(s); int len=strlen(s); int cur=0; for(i=cur=0;i
              
                贴上T的代码
               

?

?

#include
                
                 
#include
                 
                   #include
                  
                    #include
                   
                     #include
                    
                      #include
                     
                       #include
                      
                        #include
                       
                         #include
                        
                          #include
                         
                           #include
                          
                            #include
                            #define read freopen(q.in,r,stdin) #define write freopen(q.out,w,stdout) using namespace std; int x[2000006],f[2000]; char s[22000006]; int n,k; int findKth(int left,int right) { // if(left==right)return left; int i=left,j=right,center,tmp; int p=right; center=x[p]; for(;i
                            
                             =center && i
                             
                              i)return find(i+1,r); else return find(l,i-1); } int main() { //read; memset(f,0,sizeof(f)); for(int i='0';i<='9';i++)f[i]=1; while(~scanf(%d%d,&n,&k)) { getchar(); int i,j=0,cnt=0; memset(x,0,sizeof(x)); gets(s); int len=strlen(s); int cur=1; for(i=0;i
                              
                               

?

?

?