题意:统计一段区间内不同的数的和

分析:排序查询区间,离线树状数组

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long LL;
  7. const int N = 3e4+;
  8. const int mod = 1e9+;
  9. LL c[N];
  10. int n,q,x,y,T,pre[N];
  11. struct Node{
  12. int v,id;
  13. }a[N];
  14. bool cmpv(Node a,Node b){
  15. if(a.v==b.v)return a.id<b.id;
  16. return a.v<b.v;
  17. }
  18. bool cmpid(Node a,Node b){
  19. return a.id<b.id;
  20. }
  21. void add(int x,LL t){
  22. for(int i=x;i<=n;i+=i&(-i))c[i]+=t;
  23. }
  24. LL ask(int x){
  25. LL ret=;
  26. for(int i=x;i;i-=i&(-i))ret+=c[i];
  27. return ret;
  28. }
  29. struct Que{
  30. int l,r,id;
  31. bool operator<(const Que &rhs)const{
  32. return r<rhs.r;
  33. }
  34. }p[];
  35. LL ret[];
  36. int main(){
  37. scanf("%d",&T);
  38. while(T--){
  39. scanf("%d",&n);
  40. for(int i=;i<=n;++i)scanf("%d",&a[i].v),a[i].id=i;
  41. sort(a+,a++n,cmpv);
  42. for(int i=;i<=n;++i){
  43. pre[a[i].id]=-;
  44. if(i!=&&a[i].v==a[i-].v)pre[a[i].id]=a[i-].id;
  45. }
  46. sort(a+,a++n,cmpid);
  47. memset(c,,sizeof(c));
  48. scanf("%d",&q);
  49. for(int i=;i<q;++i)scanf("%d%d",&p[i].l,&p[i].r),p[i].id=i;
  50. sort(p,p+q);
  51. for(int i=,cur=;i<q;++i){
  52. for(;cur<=p[i].r;++cur){
  53. if(pre[cur]!=-)add(pre[cur],-a[cur].v);
  54. add(cur,a[cur].v);
  55. }
  56. ret[p[i].id]=ask(p[i].r)-ask(p[i].l-);
  57. }
  58. for(int i=;i<q;++i)printf("%I64d\n",ret[i]);
  59. }
  60. return ;
  61. }

HDU3333 Turing Tree 离线树状数组的更多相关文章

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

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

  2. Hdu-3333 Turning Tree (离线树状数组/线段树)

    Hdu-3333 Turning Tree 题目大意:先给出n个数字.面对q个询问区间,输出这个区间不同数的和. 题解:这道题有多重解法.我另一篇博客写了分块的解法  HDU-3333 Turing ...

  3. 区间的关系的计数 HDU 4638 离线+树状数组

    题目大意:给你n个人,每个人都有一个id,有m个询问,每次询问一个区间[l,r],问该区间内部有多少的id是连续的(单独的也算是一个) 思路:做了那么多离线+树状数组的题目,感觉这种东西就是一个模板了 ...

  4. HDU 4417 离线+树状数组

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. SPOJ 3267 D-query(离散化+在线主席树 | 离线树状数组)

    DQUERY - D-query #sorting #tree English Vietnamese Given a sequence of n numbers a1, a2, ..., an and ...

  6. P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  7. POJ 3416 Crossing --离线+树状数组

    题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少 ...

  8. HDU 2852 KiKi's K-Number(离线+树状数组)

    题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...

  9. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组

    题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...

随机推荐

  1. 创建新进程,就三个函数CreateProcessAsUser CreateProcessWithLogonW CreateProcessWithTokenW(附网友的流程)

    CreateProcessAsUser 怎么会还需要密码呢~~~ 先WTSGetActiveConsoleSessionId 得到当前的处理激活状态的SessionId OpenProcessToke ...

  2. 进入第一个Android应用界面

    前话 距离上次学习Android已经过去了半年了,这半年我干嘛去了? 嘛相信大家也没兴趣了解,简单来说就是我学习了周边的知识技术,最后终于转回Android. 感觉开发一个Android需要很多知识吧 ...

  3. webapp 开发之iScroll 学习

    demo.html <!doctype html> <html lang="en"> <head> <meta charset=" ...

  4. URAL 1066 Garland 二分

    二分H2的位置,判断条件为是否有Hi < 0 #include <cstdio> #include <cstring> #include <cstdlib> ...

  5. 从SDE库文件手工删除SDE图层(转载)

    转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言    虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途.    ...

  6. java nio的基本原理

    buffer<->channel->selector--handler... buffer与channel双通道传输数据,selector中可以有多个channel,这个样就可以多个 ...

  7. 笔记二、本地git命令

    参考书籍:     <Pro Git>中文版.pdf   git init           // 建立一个git仓库, 本地目录为工作目录, .git目录是中央数据目录 git ini ...

  8. 台湾P2P平台

    2014年6月28日下午1:30,“2014两岸三地P2P网贷行业高峰论坛”在上海会展中心友谊会堂如期举行,现场高朋满座,来自全国各地的众多知名P2P网站平台的负责人参与了讨论,并就当前P2P行业的一 ...

  9. 创建xml时,设置xml编码问题

    OutputFormat format = OutputFormat.createPrettyPrint();    format.setEncoding("GBK"); XMLW ...

  10. vijos 1379 字符串的展开

    23333333333333333 #include<iostream> #include<cstdio> #include<cstring> #include&l ...