예제 #1
0
 void build_(int (&vs_)[MAXN], int x, int l, int  r)
 {
     if(l == r) st[x] = vs_[l];
     else
     {
         build_(vs_, cl(x), l, (l + r) / 2);
         build_(vs_, cr(x), (l + r) / 2 + 1, r);
         st[x] = max(st[cl(x)], st[cr(x)]);
     }
 }
예제 #2
0
int Fujimap::build(){
  for (map<string, uint64_t>::const_iterator it = tmpEdges_.begin();
       it != tmpEdges_.end(); ++it){
    uint64_t id = getBlockID(it->first.c_str(), it->first.size());
    kf_.write(id, it->first.c_str(), it->first.size(), it->second);
  }
  tmpEdges_.clear();


  vector<FujimapBlock> cur;
  for (uint64_t i = 0; i < keyBlockN_; ++i){
    vector<pair<string, uint64_t> > kvs;
    if (kf_.read(i, kvs) == -1){
      what_ << "kf read error" << endl;
      return -1;
    }

    FujimapBlock fb;
    if (build_(kvs, fb) == -1){
      return -1;
    }

    cur.push_back(fb);
  }
  kf_.clear();
  fbs_.push_back(cur);
  return 0;
}
예제 #3
0
 void build(int (&vals_)[MAXN], int n_)
 {
     n = n_;
     build_(vals_, 1, 0, n - 1);
 }