Exemplo n.º 1
0
	/*!
	* \fn static bool GenerateSubTree(const tree<HTML::Node> &tDom, const string &tagname, tree<HTML::Node> &tSubDom);
	* \brief  生成子树
	* \param  [in]DOM原树
	* \param  [in]子树根节点的标签名
	* \param  [out]DOM子树
	* \return bool
	* \date   2011-06-01 
	* \author nanjunxiao
	*/
	bool Pretreat::GenerateSubTree(const tree<HTML::Node> &tDom, const std::string &tagname, tree<HTML::Node> &tSubDom)//目前只是为body使用
	{
		tree<HTML::Node>::iterator tIter = tDom.begin();
		tree<HTML::Node>::sibling_iterator tFromIter,tToIter;
		string sTagName;
		for (; tIter != tDom.end(); ++tIter)
		{
			/*if (tIter->tagName() == tagname)
				break;*/
			if (tIter->isTag() )
			{
				sTagName = tIter->tagName();
				transform(sTagName.begin(), sTagName.end(), sTagName.begin(), ::tolower);
				if (sTagName == tagname)
					break;
			}
		}
		if (tIter == tDom.end() ) 
		{
			return false;
		}
		
		tFromIter = tIter;
		tToIter = tDom.next_sibling(tFromIter);
		tDom.subtree(tSubDom, tFromIter, tToIter);
		return true;
	}
Exemplo n.º 2
0
Arquivo: funs.cpp Projeto: cran/mpbart
//--------------------------------------------------
//get sufficients stats for all bottom nodes
void allsuff(std::vector<std::vector<double> >& X, 
			tree& x, xinfo& xi, dinfo& di, tree::npv& bnv, 
			std::vector<sinfo>& sv)
{
   tree::tree_cp tbn; //the pointer to the bottom node for the current observations
   size_t ni;         //the  index into vector of the current bottom node
     double* xx = new double[di.n_cov];
   double y;          //current y

   bnv.clear();
   x.getbots(bnv);

   typedef tree::npv::size_type bvsz;
   bvsz nb = bnv.size();
   sv.resize(nb);

   std::map<tree::tree_cp,size_t> bnmap;
   for(bvsz i=0;i!=bnv.size();i++) bnmap[bnv[i]]=i;

   for(size_t i=0;i<di.n_samp;i++) {
      for(size_t j=0;j<di.n_cov; j++){
		xx[j] = X[i][j];
	  }
      y=di.y[i];

      tbn = x.bn(xx,xi);
      ni = bnmap[tbn];

      ++(sv[ni].n);
      sv[ni].sy += y;
      sv[ni].sy2 += y*y;
   }
}
Exemplo n.º 3
0
tree_node_<FILE_ITEM>* CFileTree::findNodeWithPathFromNode(std::string path, tree_node_<FILE_ITEM>* node)
{
	tree<FILE_ITEM>::sibling_iterator sib = filesTree.begin(node);
	tree<FILE_ITEM>::sibling_iterator end = filesTree.end(node);
	bool currentLevel = true;

	std::string currentPath = path.substr(0, path.find('\\'));
	size_t position = path.find('\\');
	std::string followingPath("");
	if (position != std::string::npos) {
		followingPath = path.substr(path.find('\\') + 1);
		currentLevel = false;
	}

	while (sib != end) {
		if (strcmp(sib->path, currentPath.c_str()) == 0) {
			if (currentLevel) {
				return sib.node;
			}
			else {
				return findNodeWithPathFromNode(followingPath, sib.node);
			}
		}
		++sib;
	}
	return NULL;
}
int main()
 {
    #ifndef ONLINE_JUDGE
    freopen(TASK".in","r",stdin);
    freopen(TASK".out","w",stdout);
    #endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    unordered_map<int,int> cnt[2];
    int n;
    cin>>n;
    vector<int> a(n);
    for(auto &it:a) cin>>it;
    vector<int> pre(n),suf(n);
    for(int i=0;i<n;i++)
    {
        pre[i]=cnt[0][a[i]]++;
        suf[n-i-1]=cnt[1][a[n-i-1]]++;
    }
    long long ans=0;
    for(int i=1;i<n;i++)
    {
        me.insert({pre[i-1],i-1});
        ans+=i-me.order_of_key({suf[i],i});
    }
    cout<<ans<<endl;
 }
Exemplo n.º 5
0
void fillAllNodesNames(Vstring& Vnames,const tree& tr){
	vector<tree::nodeP> vAllNodes;
	tr.getAllNodes(vAllNodes,tr.getRoot());
	Vnames.resize(vAllNodes.size());
	for (int i = 0; i<vAllNodes.size();++i)
		Vnames[vAllNodes[i]->id()] = vAllNodes[i]->name();
}	
Exemplo n.º 6
0
FILE_ITEM CFileTree::AddItem(char *absolutePath, unsigned char* handle)
{
	FILE_ITEM item;
	item.handle = handle;
	item.bCached = false;

	if (filesTree.empty()) {
		item.path = new char[strlen(absolutePath) + 1];
		strcpy_s(item.path, (strlen(absolutePath) + 1), absolutePath);
		item.nPathLen = strlen(item.path);

		filesTree.set_head(item);
		topNode = filesTree.begin();
	}
	else {
		std::string sPath(absolutePath);
		tree_node_<FILE_ITEM>* parentNode = findParentNodeFromRootForPath(absolutePath);
		std::string splittedPath = sPath.substr(sPath.find_last_of('\\') + 1);
		item.path = new char[splittedPath.length() + 1];
		strcpy_s(item.path, (splittedPath.length() + 1), splittedPath.c_str());
		if (parentNode) {
			filesTree.append_child(tree<FILE_ITEM>::iterator_base(parentNode), item);
		} else {
			//printf("Parent node found for %s", absolutePath);
		}
	}

	DisplayTree(topNode.node, 0);

	return item;
}
Exemplo n.º 7
0
  void build_tree(int L, int R) {
    if(L == R) return;

    int mid = (L + R)/2;
    left = new tree; left->build_tree(L, mid);
    right = new tree; right->build_tree(mid + 1, R);
  }
Exemplo n.º 8
0
int main(int argc, char** argv){
//	t.init();
#define WITH_GL
#ifdef WITH_GL
	init(argc, argv);
	glutMouseFunc(mouse);

	glutTimerFunc(1000/60, mainLoop, 1);
	glutMainLoop();
#endif
	for(int i = 0; i < 1195; i++){
//		t.grow();
#ifdef WITH_GL
		t.draw();
#else
		t.transport();	// jedna tura gry
		if(i%192 == 0){
			std::cout << "round " << i/192 << "\n\n";
			t.print();
			std::cout << std::endl;
			std::cout << std::endl;
			std::cout << std::endl;
		}
//		getchar();
#endif
	}
	return 0;
}
Exemplo n.º 9
0
int list_if(tree<int> &T,
	     list<int> &L,
	    bool (*pred)(int)) {
  L.clear();
  if (T.begin()!=T.end()) 
    list_if(T,T.begin(),L,pred);
}
Exemplo n.º 10
0
void writeSiblingsXML(const tree<AstNode>& t, const tree<AstNode>::iterator iRoot, ostream& stream)
{
	if(t.empty()) 
		return;
	if (iRoot->getType() == "root") {
		tree<AstNode>::sibling_iterator iChildren = t.begin(iRoot);
		stream << "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" << endl;
		writeSiblingsXML(t,iChildren,stream);
	}
	else if (t.number_of_children(iRoot) == 0) {
		string type = iRoot->getType();
		stream << "<php:" << type << '>';
		if (iRoot->getValue().length() > 0)
			stream << htmlentities(iRoot->getValue());
		stream << "</php:" << type << '>' << endl;
	}
	else {
		string type = iRoot->getType();
		string xmlns="";
		if (type == "start")
			xmlns = " xmlns:php=\"http://php.net/csl\"";
		stream << "<php:" << type << xmlns << '>' << endl;
		int siblingNum;
		tree<AstNode>::sibling_iterator iChildren;
		for (iChildren = t.begin(iRoot), siblingNum = 0; iChildren != t.end(iRoot); ++iChildren) 
		{
			writeSiblingsXML(t,iChildren,stream);
		}
		stream << "</php:" << type << '>' << endl;
	}
}
Exemplo n.º 11
0
int main(){
   scanf("%d",&T);
   for(int CA = 1; CA <= T ; CA++)
   {
	  mp.clear();
	  spt.init();
	  printf("Case %d:\n",CA);
	  scanf("%d %d",&n,&q);
	  for(int i= 1;i <= q;i ++)
	  {
		scanf("%s %d",str,&tmp);
		if(str[0] == 'T'){
			spt.insert(tmp,i);
			mp[i] = tmp ; 
	     }else if(str[0] == 'Q'){
			pair<int ,int > tt = spt.find(tmp);
			if(tt.first != -1 )
              printf("%ld\n",mp.order_of_key(tt.first) + 1);
			else{
		      printf("%ld\n",mp.size()-tt.second + tmp); 	
			}
		}else{
			if(tmp <= mp.size()){
				printf("%d\n",mp.find_by_order(tmp-1)->second);
			}else{
                printf("%d\n",spt.findrank(tmp)); 
			}
		}
	  }
   }
return 0;
}
Exemplo n.º 12
0
tree_node_<FILE_ITEM>* CFileTree::findNodeWithPathFromNode(std::string path, tree_node_<FILE_ITEM>* node)
{
	tree<FILE_ITEM>::sibling_iterator sib = filesTree.begin(node);
	tree<FILE_ITEM>::sibling_iterator end = filesTree.end(node);
	bool currentLevel = true;

	std::string currentPath = _first_dirname(path);

	size_t position = currentPath.size();
	std::string followingPath = _following_path(path);
	currentLevel = followingPath.empty();

	while (sib != end) {
		// printf("sib->path '%s' lv %d curpath '%s' follow '%s'\n", sib->path, currentLevel, currentPath.c_str(), followingPath.c_str());
		if (strcmp(sib->path, currentPath.c_str()) == 0) {
			if (currentLevel) {
				return sib.node;
			}
			else {
				return findNodeWithPathFromNode(followingPath, sib.node);
			}
		}
		++sib;
	}
	return NULL;
}
Exemplo n.º 13
0
void treeToJava(JNIEnv * env, const tree<J_NVItem>::iterator_base & it, jobject & jnode, const JMultiTreeNode & fields)
{
//	LOGI("Enter %s %p\n",__FUNCTION__,&it);
	//转换当前节点
	fields.cpp2Java(env, *it, jnode);	

	//处理子节点
	tree<J_NVItem>::children_iterator itc = it.begin_children_iterator();
	tree<J_NVItem>::children_iterator eitc = it.end_children_iterator();

	//jclass clsNode = env->FindClass(JCLSNAME_TreeNode);
    jclass clsArrayList = env->FindClass(JCLSNAME_ArrayList);
	jmethodID add_mid = env->GetMethodID(clsArrayList,"add","(Ljava/lang/Object;)Z");
	//当前节点孩子列表
	jobject childList = env->GetObjectField(jnode, fields.m_Childs_id);
	while(itc != eitc)
	{
		//创建java子节点
		jobject jchild = env->NewObject(gClsTreeNode, fields.m_Construct_mid);
		//转换子节点
		treeToJava(env, itc, jchild, fields);
		//添加子节点到当前节点孩子列表
        env->CallBooleanMethod(childList, add_mid, jchild);

		env->DeleteLocalRef(jchild);

		++itc;
	}		
	env->DeleteLocalRef((jobject)clsArrayList);
	env->DeleteLocalRef(childList);
//	LOGI("Leave %s %p\n",__FUNCTION__, &it);
}
Exemplo n.º 14
0
int main() {
	it.insert(10);
	it.insert(8);
	it.insert(12);
	it.insert(18);
	it.insert(16);
	it.insert(21);

	int ret = 0;

	if(!test_smallest())
	{
		cout << "test_smallest" << endl;
		ret += -1;
	}

	if(!test_largest())
	{
		cout << "test_largest" << endl;
		ret += -2;
	}

	if(!test_sum())
	{
		cout << "test_sum" << endl;
		ret += -3;
	}

	system("pause");

	return ret;
}
Exemplo n.º 15
0
bool test_smallest() {
	if(it.smallest()!=8)
		return false;
	it.insert(5);
	if(it.smallest()!=5)
		return false;
	return true;
}
Exemplo n.º 16
0
bool test_largest() {
	if(it.largest()!=21)
		return false;
	it.insert(50);
	if(it.largest()!=50)
		return false;
	return true;
}
Exemplo n.º 17
0
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void list_if(tree<int> &T,
	     tree<int>::iterator n,
	     list<int> &L,
	     bool (*pred)(int)) {
  if (pred(*n)) L.push_back(*n);
  tree<int>::iterator c = n.lchild();
  while (c!=T.end()) list_if(T,c++,L,pred);
}
Exemplo n.º 18
0
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
int count_if(tree<int> &T,tree<int>::iterator n,
	     bool (*pred)(int)) {
  int count = pred(*n);
  tree<int>::iterator c = n.lchild();
  while (c!=T.end()) 
    count += count_if(T,c++,pred);
  return count;
}
Exemplo n.º 19
0
bool test_sum() {
	if(it.sum()!=140)
		return false;
	it.insert(15);
	if(it.sum()!=155)
		return false;
	return true;
}
Exemplo n.º 20
0
    void WeaveNet(SQcont<T> const &incont, tree<T> &outnet)
    {
      outnet.clear();
      auto top(outnet.begin());
      auto now(outnet.insert(top, *incont.cbegin()));
      for(auto c = incont.cbegin()+1;c != incont.cend();++c)
	now = outnet.append_child(now, *c);
    }
Exemplo n.º 21
0
	/*!
	* \fn static void GenerateSubTree(const tree<HTML::Node> &tDom, const tree<HTML::Node>::iterator &tIter, tree<HTML::Node> &tSubDom);
	* \brief  生成子树
	* \param  [in]DOM原树
	* \param  [in]子树根节点的迭代器
	* \param  [out]DOM子树
	* \return void
	* \date   2011-06-01 
	* \author nanjunxiao
	*/
	void Pretreat::GenerateSubTree(const tree<HTML::Node> &tDom, const tree<HTML::Node>::iterator &tIter, tree<HTML::Node> &tSubDom)
	{
		
		tree<HTML::Node>::sibling_iterator tFromIter,tToIter;
		tFromIter = tIter;
		tToIter = tDom.next_sibling(tFromIter);
		tDom.subtree(tSubDom, tFromIter, tToIter);
	}
Exemplo n.º 22
0
/**
	Clean the possible patterns annotations:
		$enter_new_statement ...
*/
void clean_pattern(tree<AstNode>& tr) {
	for (tree<AstNode>::iterator iter=tr.begin(); iter!=tr.end(); ++iter) {
		if (iter->getType() == "text" && iter->getValue() == "$enter_the_new_statement") {
			iter = rewind(iter, "statement", tr);
			tr.erase(iter);
			break;
		}
	}
}
Exemplo n.º 23
0
bool detectAfterStmt(const tree<AstNode>& tr) {
	unsigned short ret = 0;
	for (tree<AstNode>::iterator iter=tr.begin(); iter!=tr.end(); ++iter) {
		if (iter->getType() == "text" && iter->getValue() == "$__END_OBF_HERE") {
			return true;
		}
	}
	return false;
}
Exemplo n.º 24
0
vector<string> getSequencesNames(const tree& t){
	vector<tree::nodeP> vleaves;
	t.getAllLeaves(vleaves,t.getRoot());
	vector<string> res;
	vector<tree::nodeP>::const_iterator i = vleaves.begin();
	for ( ; i<vleaves.end(); ++i) {
		res.push_back((*i)->name());
	}
	return res;
}
Exemplo n.º 25
0
	void insert(int v){
		if(v < value){
			if(left) left->insert(v);
			else left = new tree(v);
		}
		else{
			if(right) right->insert(v);
			else right = new tree(v);
		}
	}
Exemplo n.º 26
0
int treeHeight(tree<int> t) {
  if (t.empty()) {
    return 0;
  }

  int leftTreeHeight = treeHeight(t.LeftTree());
  int rightTreeHeight = treeHeight(t.RightTree());

  return 1 + max(leftTreeHeight, rightTreeHeight);
}
Exemplo n.º 27
0
// 
//
//  calculates expressions stored in a parse Tree
//
// 
int evaluateOpFunc(opNode* exp, tree& symbolTable, tree& localVar, funcS& funcTable){
                int rights;
                int lefts ;
                String s = exp->stringOp();
                if(s == "NONE"){
                    return exp->val();
                }else if(isValidVarName(s)){// if s is not an operation
			if(s == "call"){
                                exp = exp->leftNode();
                                String funcName = exp->stringOp();// gets function name
				param* parameter;
				if(funcTable.isMember(funcName)){
                                	 parameter = funcTable.getParameters(funcName);// passing arguments
				}else{

					printf("WARNING: Function %s is not declared \n", funcName.c_str());
					return 0;
				}
				int i = 0;
				opNode* params = exp->leftNode();
				if(params->stringOp() != "Ecall"){
					while(params->stringOp() != "Ecall"){
						parameter->op[i].value = evaluateOpFunc(params->rightNode(), symbolTable, localVar, funcTable);
						params = params->leftNode();
						i += 1;	
					}
				}
				tree* newTree = new tree;
			        for(int j =0; j < i ; j+=1){
                			newTree->insert(parameter->op[j].para, parameter->op[j].value);
        			}
				if(funcTable.isMember(funcName)){
        				funcTable.addLocalVar(funcName, newTree);
					evaluateFunc(funcName, symbolTable, funcTable);
                                	return  funcTable.getVal(funcName);
				}else{

					printf("Warning: function %s is not declared \n", funcName.c_str());
				}		
                        }
			if(localVar.isMember(s)){
                        	return localVar.getVal(s);
			}else if(symbolTable.isMember(s)){
				return symbolTable.getVal(s);
			}
                }
                if(exp->leftNode()){
                         lefts = evaluateOpFunc(exp->leftNode(), symbolTable, localVar, funcTable);
			if(s == "~" || s == "!"){return result(s, lefts, rights);}
                }
		if(exp->rightNode()){
                         rights = evaluateOpFunc(exp->rightNode(), symbolTable, localVar, funcTable);
                }
                return result(s,lefts,rights);
}
Exemplo n.º 28
0
  long long query(int L, int R, int x) {
    if(L == R) return val;

    int mid = (L + R)/2;
    if(x <= mid) {
      return val + left->query(L, mid, x);
    }
    else {
      return val + right->query(mid + 1, R, x);
    }
  }
Exemplo n.º 29
0
int countEdges(tree<T> t)
{
	if (t.empty())
	{
		return 0;
	}
	else
	{
		return 1 + countEdges(t.leftTree()) + countEdges(t.rightTree());
	}
}
Exemplo n.º 30
0
  void make_random_tree(tree<int> &T,tree<int>::iterator n,
			int M,int level,int siblings) {
    double lambda = 1.0/(double(siblings)/double(level)+1.0);
    n=T.insert(n,irand(M));
    tree<int>::iterator c=n.lchild();
    while (true) {
      if (drand()<lambda) break;
      make_random_tree(T,c,M,level+1,siblings);
      c=n.lchild();
    }
  }