HDU_3333 Turing Tree 【线段树 + 离散化】
一、题目 Turing Tree 二、分析 这题主要还是在区间的处理上。 为了保证区间内的数没有重复的,那么可以对区间按右端点从小到大排序,这样对原数组处理时,尽量保证不重复的元素靠右(可以假设右端点固定考虑),就可以保证区间求出来的值是不重复的,对于重复的就把前面位置出现的这个数减掉(即赋值为0)即可。 由于原数组的数比较大,要记录其之前的位置无法直接开数组,所以需要离散化。后面的就是普通的线段树的单点修改和区间查询了。 三、AC代码 #include <bits/stdc++.h> using namespace std; #define ll long long #define Min(a,b) ((a)>(b)?(b):(a)) #define Max(a,b) ((a)>(b)?(a):(b)) #define lson (rt<<1) #define rson (rt<<1|1) #define P pair<int, int> const int MAXN = 3e4; const int MAXQ = 1e5; ll A[MAXN + 13], Sum[MAXN<<2]; int Pre[MAXN + 13]; vector<ll> vec; struct node { int L, R, id; bool operator < (const