hihocoder 1077 线段树 java实现

原创 2016年06月01日 15:52:53

package tree;


import java.util.Scanner;


/*

 * 10

3655 5246 8991 5933 7474 7603 6098 6654 2414 884

 */

public class Week19 {

private static int dataIndex = 0;

private static int maximum = 0;


public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int nodenum = Integer.parseInt(scanner.nextLine());

String nodedata = scanner.nextLine();

node19 root = Week19.creSegTree(1, nodenum, nodedata);

int querynum = Integer.parseInt(scanner.nextLine());

for(int i=0; i<querynum; i++){

String querydata = scanner.nextLine();

int type = Integer.parseInt(querydata.split(" ")[0]);

int firstnum = Integer.parseInt(querydata.split(" ")[1]);

int secondnum = Integer.parseInt(querydata.split(" ")[2]);

if(type == 0){

query(firstnum, secondnum, root);

System.out.println(maximum);

maximum = 0;

}

if(type == 1) update(firstnum, secondnum, root);

}

}


public static node19 creSegTree(int left, int right, String data){

node19 node = new node19(left, right);

if(left != right){

node19 node1 = creSegTree(left, ((left + right) / 2), data);

node19 node2 = creSegTree(((left + right) / 2) + 1, right, data);

node.value = node1.value > node2.value ? node2.value : node1.value;

node.leftChild = node1;

node.rightChild = node2;

return node;

}

else{

node.value = Integer.parseInt(data.split(" ")[dataIndex++]);

return node;

}

}


public static void query(int firstnum, int secondnum, node19 root){

if(firstnum == root.left && secondnum == root.right){

if(maximum == 0) maximum = root.value;

else if(root.value < maximum) maximum = root.value;

}

else if(firstnum > (root.left + root.right) / 2) query(firstnum, secondnum, root.rightChild);

else if(secondnum < (root.left + root.right) / 2 + 1) query(firstnum, secondnum, root.leftChild);

else{

query(firstnum, (root.left + root.right) / 2, root.leftChild);

query((root.left + root.right) / 2 + 1, secondnum, root.rightChild);

}

}


public static void update(int firstnum, int secondnum, node19 root){

if(root.left == firstnum && root.right == firstnum) root.value = secondnum;

else if(firstnum < (root.left + root.right) / 2 + 1){ 

update(firstnum, secondnum, root.leftChild);

root.value = root.leftChild.value > root.rightChild.value ? root.rightChild.value : root.leftChild.value;

}

else if(firstnum > (root.left + root.right) / 2){ 

update(firstnum, secondnum, root.rightChild);

root.value = root.leftChild.value > root.rightChild.value ? root.rightChild.value : root.leftChild.value;

}

}

}


class node19{

int left;

int right;

int value;

node19 leftChild;

node19 rightChild;

public node19(int left, int right){

this.left = left;

this.right = right;

}


}



hihocoder1077 线段树

#include #include #include #include #include #include #include #include #include #include u...
  • qq_24667639
  • qq_24667639
  • 2015年07月28日 10:00
  • 440

hihocoder #1077 RMQ问题再临-线段树

#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N...
  • qq_33245342
  • qq_33245342
  • 2017年02月08日 22:00
  • 210

hihocoder 1077线段树

按自己理解写了个拙劣的线段树。         内存居然用了47MB,不知道这样的程序最多在计算机里能占用多少内存 // hiho1077 segment tree #include #inclu...
  • yang_zhao_xiong
  • yang_zhao_xiong
  • 2015年02月22日 11:30
  • 295

线段树-单点更新-hihoCoder1077

线段树线段树是一种二叉搜索树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,它基本能保持每个操作的时间复杂度为O(lgN)。假定...
  • WilliamSun0122
  • WilliamSun0122
  • 2017年07月31日 19:06
  • 171

hihocoder #1078 : 线段树的区间修改

解题思路:基础的线段树区间修改 我按照书上敲的代码不知道为什么WA。。。 #include #include #include using namespace std; cons...
  • hexianhao
  • hexianhao
  • 2016年02月20日 20:25
  • 314

hihoCoder - 1116 - 计算 (线段树)

计算题目传送:#1116 : 计算AC代码:#include #include #include #include #include #include #include #include...
  • u014355480
  • u014355480
  • 2015年08月17日 22:38
  • 894

java代码实现线段树

//线段树  用来存取1-n 这条线段中  整数点出现的次数,已经一段中所有点出现的次数 //扩展 可以把整数点映射成n个实体,  每个实体会存放着一点资源,  线段树在大规模读取连续数的时候存在着优...
  • u010953266
  • u010953266
  • 2015年01月16日 10:46
  • 1541

一个用JAVA实现的线段树类--泛型 重构.

抽象类SegmentOperation.java: public abstract class SegmentOperationT> { public abstract T getMid(T ...
  • judyge
  • judyge
  • 2014年11月16日 19:23
  • 661

【第一个线段树+第一个Java程序!】hdoj 1754 I Hate It

Java代码。。。。。纠结了好久。。。。 import java.io.*;import java.util.*;class Tree { public Tree L, R; public int V...
  • cclsoft
  • cclsoft
  • 2010年04月17日 12:22
  • 2217

[HihoCoder]#1077 : RMQ问题再临-线段树

华电北风吹 天津大学认知计算与应用重点实验室 2016-07-26题目链接: http://hihocoder.com/problemset/problem/1077题目分析: 模板题...
  • zhangzhengyi03539
  • zhangzhengyi03539
  • 2016年07月26日 10:32
  • 199
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hihocoder 1077 线段树 java实现
举报原因:
原因补充:

(最多只允许输入30个字)