题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2492/

题目大意:给定一个序列,求长度为三的子序列(a,b,c)使得a<b<c或a>b>c,求这样的序列的个数;只要对于每一个位置的数,用树状数组维护前缀和,求出该位置前面比他大的数的个数和比他小的个数,再用另一个树状数组从末位向前维护该位置后面比他大的数的格式和比他小的数的个数。最终 前大*后小+前小*后大 对n个位置求和即可。

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef unsigned int ui;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define pf printf
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define prime1 1e9+7
  9. #define prime2 1e9+9
  10. #define pi 3.14159265
  11. #define scand(x) scanf("%llf",&x)
  12. #define f(i,a,b) for(int i=a;i<=b;i++)
  13. #define scan(a) scanf("%d",&a)
  14. #define dbg(args) cout<<#args<<":"<<args<<endl;
  15. #define pb(i) push_back(i)
  16. #define ppb(x) pop_back(x)
  17. #define inf 0x3f3f3f3f
  18. #define maxn 100010
  19. int n,m,t;
  20. int a[maxn],c[maxn];
  21. int lowbit(int x)
  22. {
  23. return x&(-x);
  24. }
  25. int query(int x)
  26. {
  27. int ans=;
  28. for(int i=x;i;i-=lowbit(i))
  29. {
  30. ans+=c[i];
  31. }
  32. return ans;
  33. }
  34. void update(int x,int C)
  35. {
  36. for(int i=x;i<=;i+=lowbit(i))
  37. {
  38. c[i]+=C;
  39. }
  40. }
  41. int l1[maxn],r1[maxn],l2[maxn],r2[maxn];
  42. int main()
  43. {
  44. //freopen("input.txt","r",stdin);
  45. //freopen("output.txt","w",stdout);
  46. std::ios::sync_with_stdio(false);
  47. scan(t);
  48. while(t--)
  49. {
  50. scan(n);
  51. f(i,,n)scan(a[i]);
  52. mem(c,);
  53. f(i,,n)
  54. {
  55. l1[i]=query(a[i]-);//查询左侧比a[i]小的数的个数
  56. l2[i]=i--l1[i];//查询左侧比a[i]大的数的数量
  57. update(a[i],);
  58. }
  59. mem(c,);
  60. for(int i=n;i>=;i--)
  61. {
  62. r1[i]=query(a[i]-);//右侧比a[i]小的数的个数
  63. r2[i]=n-i-r1[i];//右侧比a[i]大的数的个数
  64. update(a[i],);
  65. }
  66. ll ans=;
  67. f(i,,n)
  68. {
  69. ans+=l1[i]*r2[i]+l2[i]*r1[i];
  70. }
  71. pf("%lld\n",ans);
  72. }
  73. }

hdu2492树状数组的更多相关文章

  1. hdu2492 数状数组或者线段树

    题意:      给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. bzoj1878--离线+树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

  4. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  7. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  8. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  9. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

随机推荐

  1. 根据现有的数据库自动生成Django model

    Django引入外部数据库还是比较方便的,首先在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自动生成models模型文件 python ma ...

  2. Parentheses Balance (括号平衡)---栈

    题目链接:https://vjudge.net/contest/171027#problem/E Yes的输出条件: 1. 空字符串 2.形如()[]; 3.形如([])或者[()] 分析: 1.设置 ...

  3. 干了这碗蛋炒饭 继续APP性能提升

    [前言] 什么是做功能,功能就是客户要一碗蛋炒饭,然后做了给他. 我想谁都明白,一家餐厅能活下去,是因为能把食材料理好,客户喜欢. 更准确的说,一家餐厅能活得下去,要考虑用户需求.食材,然后就是料理水 ...

  4. numpy学习总结

    Contents Numpy是一个用python实现的科学计算包,主要提供矩阵运算的功能,而矩阵运算在机器学习领域应用非常广泛,Numpy一般与Scrapy.matplotlib一起使用. Numpy ...

  5. Fragment argument

    每个Fragment实例都可以附带一个Bundle对象,该bundle包含键值对,可以像附加extra到Activity的intent中那样使用他们.一个键值对即一个argument. 创建frage ...

  6. Redis list实现原理 - 双向循环链表

    双向链表 双向表示每个节点知道自己的直接前驱和直接后继,每个节点需要三个域 查找方向可以是从左往右也可以是从右往左,但是要实现从右往左还需要终端节点的地址,所以通常会设计成双向的循环链表; 双向的循环 ...

  7. R语言入门级实例——用igragh包分析社群

    R语言入门级实例——用igragh包分析社群 引入—— 本文的主要目的是初步实现R的igraph包的基础功能,包括绘制关系网络图(social relationship).利用算法进行社群发现(com ...

  8. Django+Nginx+Uwsgi环境配置

    nginx.conf : server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.acces ...

  9. SpringBoot整合Mybatis对单表的增、删、改、查操作

    一.目标 SpringBoot整合Mybatis对单表的增.删.改.查操作 二.开发工具及项目环境 IDE: IntelliJ IDEA 2019.3 SQL:Navicat for MySQL 三. ...

  10. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...