给定数组,求出数组每个数左边比该数小的数的个数
1.问题描述
给定一个数组num,数组长度为n,求出数组中每个数左边比该数小的数的个数
2.做法
是一道比较典型的线段树的题目.
具体做法是我们以数组中最小的数low和最大的数high为线段树根节点的两个端点,建立线段树,线段树所有节点的权值初始为空.
接着在线段树中依次查询数组中的数x,找到相应的位置.找到后,权值+1,并向上改变父节点的权值,这里是为了统计数组中落在[l,r]区间的数的个数.
最后求解答案时我们只需要在线段树中寻找[low,x-1]节点的值就好,具体过程参考代码(java实现)
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static int a;
public static int b;
public static int c;
final static int INF = 0xffffff;
final static int LOW = -0xfffffff;
public static class SegmentTreeNode {
SegmentTreeNode leftChild;
SegmentTreeNode rightChild;
public int count;
public int left;
public int right;
public int cover;
public SegmentTreeNode(int left, int right) {
this.left = left;
this.right = right;
this.count = 0;
this.cover = 0;
}
}//java线段树的实现
public static