# HDU 3333 Turing Tree 线段树 or 树状数组

/*
ID: sdj22251
PROG: subset
LANG: C++
*/
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#define MAXN 66666
#define MAXM 104444
#define INF 100000000
#define eps 1e-7
#define L(X) X<<1
#define R(X) X<<1|1
using namespace std;
struct interval
{
int l, r, id;
bool operator <(const interval &a)const
{
return r < a.r;
}
}p[MAXM];
int x[MAXN], a[MAXN], h[MAXN], n;
long long tx[MAXN], ans[MAXM];
int bin(int v, int bound)
{
int low = 0, high = bound - 1;
while(low <= high)
{
int mid = (low + high) >> 1;
if(x[mid] == v) return mid;
if(x[mid] < v) low = mid + 1;
else high = mid - 1;
}
return -1;
}
int lowbit(int x)
{
return x & -x;
}
void modify(int x, int v)
{
for(int i = x; i <= n; i += lowbit(i))
tx[i] += v;
}
long long get_sum(int x)
{
long long sum = 0;
for(int i = x; i > 0; i -= lowbit(i))
sum += tx[i];
return sum;
}
int main()
{
int T, m;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
int cnt = 0;
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
x[cnt++] = a[i];
}
memset(tx, 0, sizeof(tx));
sort(x, x + cnt);
cnt = unique(x, x + cnt) - x;
scanf("%d", &m);
for(int i = 0; i < m; i++)
{
scanf("%d%d", &p[i].l, &p[i].r);
p[i].id = i;
}
sort(p, p + m);
for(int i = 0; i < cnt; i++)
h[i] = 0;
int j = 0;
for(int i = 1; i <= n; i++)
{
int id = bin(a[i], cnt);
if(h[id]) modify(h[id], -a[i]);
modify(i, a[i]);
h[id] = i;
for(; j < m; j++)
{
if(p[j].r == i) ans[p[j].id] = get_sum(p[j].r) - get_sum(p[j].l - 1);
else break;
}
}
for(int i = 0; i < m; i++)
printf("%I64d\n", ans[i]);
}
return 0;
}


• 本文已收录于以下专栏：

## hdu 3333 Turing Tree 线段树/树状数组

• cqlf__
• 2013年04月28日 19:58
• 684

## HDU - 3333 Turing Tree(树状数组)

• L123012013048
• 2015年10月20日 16:04
• 252

## hdu 3333 Turing Tree 树状数组或者线段树

#include #include #include using namespace std; #define lowbit(x) ((x)&(-x)) #define maxn 30003 #...
• a601025382s
• 2013年07月20日 12:58
• 557

## HDU 3333 Turing Tree（树状数组 || 线段树）

• u014664226
• 2015年08月06日 01:19
• 622

## hdu 3333 Turing Tree 树状数组

• zhoutonglx
• 2015年07月17日 18:45
• 181

## HDU 3333 Turing Tree（离线操作+线段树||树状数组）

After inventing Turing Tree, 3xian always felt boring when solving problems about intervals, because...
• qq_37497322
• 2017年07月27日 09:45
• 211

## HDU 3333 Turing Tree（树状数组）

• sunrainchy
• 2013年12月03日 13:29
• 447

## hdu 3333 Turing Tree ( 树状数组）

• u013781361
• 2014年04月09日 12:44
• 347

## HDU 3333 Turing Tree（线段树）

Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To...
• Shili_Xu
• 2017年09月24日 18:27
• 73

## hdu 3333 Turing Tree 线段树

• fallenfall
• 2013年10月20日 16:39
• 510

举报原因： 您举报文章：HDU 3333 Turing Tree 线段树 or 树状数组 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)