题意:

给你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. jsp自定自定义标签
  2. springboot+vue在线音乐网站
  3. php cookie删除不了,php cookie删除不了怎么办
  4. 2015年百度之星初赛(1) --- B 找连续数
  5. 深入思考:算法工程师的落地能力具体指什么,如何提升自己的落地能力?
  6. linux 声卡权限,archlinux的声卡问题如何解决
  7. 传一个实体一个string_没想到,一个小小的String还有这么多窍门
  8. ffmpeg 推流同时录像命令_使用FFmpeg将rtsp流摄像头视频转码为rtmp播放
  9. 如何卸载mingw_minGW在windows安装 | 学步园
  10. thinkphp生成的验证码不显示问题解决
  11. C#租房管理系统(课程设计)
  12. 高层建筑电气设计说明书
  13. 【超详细】Redhat Linux 7/CentOS 7/Oracle Linux 7安装MySQL5.7
  14. 2019 Java 全栈工程师进阶路线图,一定要收藏!
  15. Word自动生成的目录超出页边距
  16. html5创建桌面快捷方式,iOS APP创建桌面快捷方式
  17. 单细胞测序在免疫治疗研究中的应用
  18. 聚焦场景 共建生态 加速AI落地——2018中国人工智能应用与生态峰会成功举办
  19. Python实验报告一 python基础试题练习
  20. 【记录】IOS手机如何配置whistle代理进行抓包?(苹果系列)(安卓应该也是类似处理)

热门文章

  1. IT江湖,哪个门派最挨踢?
  2. java数组基本操作
  3. 前端之JQuery:JQuery属性操作
  4. 电梯控制项目设计报告-第十周
  5. 【Java学习笔记】修饰符
  6. 装饰者模式(C#)实现
  7. Delphi 与 DirectX 之 DelphiX(63): TDIB.DoPosterize();
  8. [Usaco2009 Feb]Revamping Trails 堆优化 Dijkstra
  9. window下安装mysql
  10. Redis(十三)Python客户端redis-py