hdu 3333 Turing Tree
给n个数, m个询问, 每次询问输出区间内的数的和, 相同的数只计算一次。
数组里的数是>-1e9 <1e9, 可以把它离散以后用莫队搞...
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
const int maxn = 3e5+;
int a[maxn], b[maxn], c[maxn];
ll ans[];
struct node
{
int l, r, id, block;
bool operator < (node a)const
{
if(block == a.block)
return r<a.r;
return block<a.block;
}
}q[];
int main()
{
int t, n, m;
cin>>t;
while(t--) {
scanf("%d", &n);
mem(c);
for(int i = ; i<=n; i++) {
scanf("%d", &a[i]);
b[i-] = a[i];
}
sort(b, b+n);
int cnt = unique(b, b+n)-b;
for(int i = ; i<=n; i++) {
a[i] = lower_bound(b, b+cnt, a[i])-b+;
}
int BLOCK = max(1.0, sqrt(cnt*1.0));
cin>>m;
for(int i = ; i<m; i++) {
scanf("%d%d", &q[i].l, &q[i].r);
q[i].block = q[i].l/BLOCK;
q[i].id = i;
}
sort(q, q+m);
ll sum = ;
for(int i = q[].l; i<=q[].r; i++) {
if(!c[a[i]]) {
sum += b[a[i]-];
}
c[a[i]]++;
}
ans[q[].id] = sum;
for(int i = ; i<m; i++) {
if(q[i].l<q[i-].l) {
for(int j = q[i-].l-; j>=q[i].l; j--) {
if(!c[a[j]]) {
sum += b[a[j]-];
}
c[a[j]]++;
}
} else {
for(int j = q[i-].l; j<q[i].l; j++) {
if(c[a[j]]==) {
sum -= b[a[j]-];
}
c[a[j]]--;
}
}
if(q[i].r>q[i-].r) {
for(int j = q[i-].r+; j<=q[i].r; j++) {
if(!c[a[j]]) {
sum += b[a[j]-];
}
c[a[j]]++;
}
} else {
for(int j = q[i-].r; j>q[i].r; j--) {
if(c[a[j]] == ) {
sum -= b[a[j]-];
}
c[a[j]]--;
}
}
ans[q[i].id] = sum;
}
for(int i = ; i<m; i++)
printf("%I64d\n", ans[i]);
}
return ;
}
hdu 3333 Turing Tree的更多相关文章
- hdu 3333 Turing Tree 图灵树(线段树 + 二分离散)
http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Others) ...
- HDU 3333 Turing Tree 线段树+离线处理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Othe ...
- HDU 3333 Turing Tree(离线树状数组)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3333 Turing Tree (线段树)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...
- HDU 3333 Turing Tree (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...
- hdu 3333 Turing Tree(线段树+离散化)
刚看到是3xian大牛的题就让我菊花一紧,觉着这题肯定各种高端大气上档次,结果果然没让我失望. 刚开始我以为是一个普通的线段树区间求和,然后啪啪啪代码敲完测试没通过,才注意到这个求和是要去掉相同的值的 ...
- 【树状数组+离线查询】HDU 3333 Turing Tree
https://www.bnuoj.com/v3/contest_show.php?cid=9149#problem/H [题意] 给定一个数组,查询任意区间内不同数字之和. (n<=30000 ...
- SPOJ D-query && HDU 3333 Turing Tree (线段树 && 区间不相同数个数or和 && 离线处理)
题意 : 给出一段n个数的序列,接下来给出m个询问,询问的内容SPOJ是(L, R)这个区间内不同的数的个数,HDU是不同数的和 分析 : 一个经典的问题,思路是将所有问询区间存起来,然后按右端点排序 ...
- HDU 3333 Turing Tree --树状数组+离线处理
题意:统计一段序列[L,R]的和,重复元素只算一次. 解法:容易看出在线做很难处理重复的情况,干脆全部讲查询读进来,然后将查询根据右端点排个序,然后离散化数据以后就可以操作了. 每次读入一个数,如果这 ...
随机推荐
- js完美继承代码示例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用rowid和rownum获取记录时要注意的问题
我们知道.rowid和rownum在Oracle中都是能够被当做伪劣使用的,主要用来定位表中特定的记录,但它们是有差别的,rowid是和行记录的物理地址相应的.而rownum则不是,是通过返回的记录集 ...
- JavaScript 开发经验整理
前言 今年接触了一个B/S的项目,总结了一些JavaScript开发经验,整理些有用的内容与大家分享. 本文会持续更新... 1.实现代码访问的控制 随着项目JavaScript代码库扩大,本应被控制 ...
- socketio 握手前中断报错
前两天折腾了下socketio,部署完发现通过nginx代理之后前端的socket无法和后端通信了,于是暴查一通,最后解决问题: location / { proxy_pass http://127. ...
- [编程题] 最大的LeftMax与rightMax之差绝对值
[编程题] 最大的LeftMax与rightMax之差绝对值 给定一个长度为N的整型数组arr,可以划分成左右两个部分: 左部分arr[0..K],右部分arr[K+1..arr.length-1], ...
- <jsp:directive.page>标签
directive 英 [dɪ'rektɪv; daɪ-] 美 [daɪ'rɛktɪv] n. 指示:指令 adj. 指导的:管理的 等效于 <%page import="com.ct ...
- A - A
A - A Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- J - 搞笑版费马大定理
J - 搞笑版费马大定理 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit ...
- SGU 248. Integer Linear Programming( 背包dp )
看了半天...发现就是个背包...然后就不打算敲了. 看了一眼forum..顿时吓傻..其他人用了gcd啊什么的各种奇怪的东西..然后还是敲了个背包结果就AC了= =既然写了代码就扔上来吧... -- ...
- USACO Section 5.1 Fencing the Cows(凸包)
裸的凸包..很好写,废话不说,直接贴代码. ----------------------------------------------------------------------------- ...