题意:

给你n个数的序列a,q个询问,每个询问给l,r,求在下标i在[l,r]的区间内不含重复数的和

分析:

这类题目觉得很好,很练思维,觉得不太好做。

用BIT维护和,我们可以从前向后扫一遍序列,当前数在前面已经出现过了,前一个该数的位置上就要减去这个数才保证正确(不重复),但查询区间是随机的,肯定相互影响,则我们用离线处理,先把所有查询区间按右边界升序排列,这样就不会影响了。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define N 50010
#define read freopen("in.txt", "r", stdin)
const ll  INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod =  1000000007;
ll bit[N],a[N],tmp[N],total[200010];
//bef前一个相同数的位置
int bef[N],n,m;
struct node{
int l,r,id;
}q[200010];
bool cmp(node x,node y){return x.r<y.r;
}
void add(int x,ll d){while(x<=n){bit[x]+=d;x+=(x&(-x));}
}
ll sum(int x){ll num=0;while(x>0){num+=bit[x];x-=(x&(-x));}return num;
}
void solve(){sort(tmp+1,tmp+1+n);sort(q,q+m,cmp);memset(bef,0,sizeof(bef));int j=0;for(int i=1;i<=n;++i){int pos=lower_bound(tmp+1,tmp+n+1,a[i])-tmp;if(!bef[pos]){add(i,a[i]);bef[pos]=i;}else{add(bef[pos],-a[i]);add(i,a[i]);bef[pos]=i;}while(q[j].r==i&&j<m){total[q[j].id]=sum(q[j].r)-sum(q[j].l-1);j++;}}for(int i=0;i<m;++i)printf("%I64d\n",total[i]);
}
int main()
{int t;scanf("%d",&t);while(t--){memset(bit,0,sizeof(bit));scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%I64d",&a[i]);tmp[i]=a[i];}scanf("%d",&m);for(int i=0;i<m;++i){scanf("%d%d",&q[i].l,&q[i].r);q[i].id=i;}solve();}
return 0;
}

转载于:https://www.cnblogs.com/zsf123/p/4734925.html

HDU 3333-Turing Tree(BIT好题)相关推荐

  1. HDU 3333 Turing Tree(树状数组+离线处理+离散化)

    题目大意 给一个 n(1≤n≤30000) 个数,数的范围是 0~109.现在给了 Q 个询问,询问的内容是:一个区间 [L, R] 中,所有不同的数的和是多少? 其实和 HDU 3874 一个意思 ...

  2. hdu 3333 Turing Tree 求区间内不同数的和——线段树解法

    http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意:求区间内不同数的和 #include<bits/stdc++.h> using name ...

  3. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想

    传送门 首先第一次做这种求不同元素和的线段树题,猜想是个裸题.但是题目中有一句话显然给题目降低了很大的难度,就是 想想其实它就是在暗示你这道题你要结合多次询问来处理,也就是所谓的离线,而不是一次一次的 ...

  4. HDU - 3333 Turing Tree(线段树+离线处理)

    题目链接:点击查看 题目大意:给定一个长度为n的数列,依次求m个区间中不相同数字之和 题目分析:n给的是3e4,看到区间问题先要想到线段树或差分区间或动态规划,暴力是肯定不行滴,那么这个题已经知道是需 ...

  5. HDU 3333 Turing Tree(树状数组/主席树)

    题意 给定一个长度为 \(n​\) 的序列,\(m​\) 个查询,每次查询区间 \([L,R]​\) 范围内不同元素的和. \(1\leq T \leq 10\) \(1 \leq n\leq 300 ...

  6. HDU 4812 D Tree (点分治) (2013ACM/ICPC亚洲区南京站现场赛)

    HDU 4812 D Tree 思路 点对距离相等并且要求输出字典序最小的点对,距离相等不就是点分治裸题了嘛, 照着这个思路出发我们只要记录下所有点对是满足要求的,然后再去找字典序最小的点对就行了, ...

  7. 【HDU】5370 Tree Maker 【树dp】

    传送门:[HDU]5370 Tree Maker my  code:my~~code: #include <bits/stdc++.h> using namespace std ;type ...

  8. HDU 5573 Binary Tree 构造

    Binary Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 Description The Old Frog King lives ...

  9. hdu 1710 Binary Tree Traversals (二叉树)

    1 /********************************************************** 2 题目: Binary Tree Traversals(hdu 1710) ...

  10. ☆【CodeForces - 764C】Timofey and a tree (思维题,树的性质)

    题干: Each New Year Timofey and his friends cut down a tree of n vertices and bring it home. After tha ...

最新文章

  1. 用flex进行网易云音乐界面构建和布局解析(2)
  2. svn: Checksum mismatch while updating 'D:\workspace\demo\test\.svn\text-base\test.php.svn-base'
  3. jquery单选框radio绑定click事件实现和是否选中的方法
  4. fundamental-react在POC中的一个应用
  5. 汉邦高科范俊峰:关于透雾摄像机那点事
  6. php移动签批源码_PHP让网站移动访问更加友好方法
  7. 环形链表||(Leetcode第142题)
  8. GNS3 Windows安装
  9. 我的世界服务器自定义怪物怎么用,我的世界 教你自定义怪物属性
  10. 【Java从0到架构师】Spring - 纯注解开发
  11. Linux的安装及忘记Linux密码的措施
  12. POJ 2226 Muddy Fields(最小点覆盖)题解
  13. UE4在VR模式下使用3D控件
  14. FMEA-MSR 步骤五:风险分析(一)
  15. 使用Java快速开发一个新闻爬虫项目
  16. WebDav-Milton之一
  17. day04 java学习
  18. java颜色识别_Java颜色检测
  19. no such instruction问题
  20. perror 函数用法

热门文章

  1. 定了!这 35 所高校将设人工智能本科专业!
  2. 未来互联网最稀缺的能力是什么?
  3. 爱我或者恨我,我就是我!
  4. c语言检测数独是否正确,会数独的大佬请进。这是个判断九宫格数独是否正确的程序。...
  5. java之多态(一)
  6. 对于algorithm102的总结
  7. 【链表】Remove Duplicates from Sorted List II(三指针)
  8. iPhone OS平台:丰富的可能性
  9. 使用.NET Mobile API即51Degrees.mobi检测User-Agent
  10. 利用反射技术动态执行方法时如何取引用类参数的值