?
题目意思很简单,就是给你一个序列,查询某区间第K大的数;
方法1:时间复杂度O(N*M);不支持更新操作,代码简单;
利用结构体排序,保留原数据的顺序。
#include
#include
#include
#define N 100000 using namespace std; /* 这个思路很好;时间复杂度O(n*m); 不过还好这个题目给的数据量不大,而且时间限制给了2s,所以可以很轻松的过; */ struct NODE { int x,id; }node[N]; bool cmp(NODE a,NODE b) { return a.x
=a&&node[j].id<=b) k--; if(!k) { printf(%d ,node[j].x); break; } } } } return 0; }
?
方法2:归并树,时间复杂度O(nlogn+mlong^3(n));利用归并排序,用线段树位数数组顺序;
#include
#include
#include
#include
#include
#include
方法3:划分树;好吧,这个思路我还没有整理好,给这个牛逼算法留一块空地;^_^....
?
?