题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j).

解法:分别从左到右,由右到左预处理到某个下标为止有多少个数等于该下标,用map维护。

然后树状数组更新每个f(j,n,a[j]),预处理完毕,接下来,从左往右扫过去,每次从树状数组中删去a[i],因为i != j,i不能用作后面的统计,然后统计getsum(inc[a[i]]-1),

(inc表示从左到右),即查询比此时的a[i]小的f(j,n,a[j])个数。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <map>
#define lll __int64
using namespace std;
using namespace __gnu_cxx;
#define N 1000007
#define M 22int c[N],a[N];
map<int,int> inc,des;
int n;int lowbit(int x)
{return x & (-x);
}void modify(int x,int val)
{while(x <= n){c[x] += val;x += lowbit(x);}
}int getsum(int x)
{int res = 0;while(x > 0){res += c[x];x -= lowbit(x);}return res;
}int main()
{int i;inc.clear();des.clear();memset(c,0,sizeof(c));scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=n;i>=1;i--){des[a[i]]++;modify(des[a[i]],1);}lll ans = 0;for(i=1;i<=n;i++){inc[a[i]]++;modify(des[a[i]],-1);des[a[i]]--;ans += getsum(inc[a[i]]-1);}printf("%I64d\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/whatbeg/p/3917725.html

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组相关推荐

  1. Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)

    题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和X ...

  2. Codeforces Round #439 (Div. 2) E. The Untended Antiquity (hash+数状数组)

    这个题,做出来的人很多,我感觉是数据不够强,我看了很多人的代码直接暴力也能过了,直接暴力如果数据够强的话肯定是时间超限,边缘数据不够强.如果和上次一样估计很多人的E会GG.我看到一位OIdalao的代 ...

  3. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  4. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  5. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  6. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

  7. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸

    D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  8. Codeforces Round #686 (Div. 3) F. Array Partition(二分+线段树)

    题意:一段区间,让你分割成三段,第一段取max,第二段取min,第三段取max.问你怎么分割这个区间. 题解: 三个区间我们可以用两个点将一段区间分成三段区间. 二分:我们首先找这个题有关的单调性,我 ...

  9. Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥

    传送门 文章目录 题意: 思路: 题意: 给你一颗基环树,求长度>=1>=1>=1的路径个数. 思路: 先考虑一棵树,他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2} ...

最新文章

  1. open python语言实现 pdf_使用python操作Pdf代码实现
  2. 如何进行服务器备份操作系统,如何在Linux服务器上做备份和恢复
  3. 使用Express和MongoDB构建简单的CRUD应用程序
  4. jqueryvar语句_你真的掌握变量和类型了吗
  5. Java计算的XML面试题
  6. 由脚本创建的新元素事件不触发和用的easyUI插件中的多选框不起作用的解决方法...
  7. Win10编译SqlCipher步骤
  8. 用 JSON和userData 更全面的模拟 localStorage
  9. 【深入浅出通信原理-学习笔记】天线技术
  10. 无法启动此程序因为计算机丢失d3dx9,无法启动此程序.因为计算机中丢失d3dx9_43.dll.尝试重新安装改程序以解决问题...
  11. 纯干货分享,2021年阿里巴巴社招面试题总结,本人上周已成功入职!
  12. Coding(码市)教程(一):基础配置
  13. 虚拟机网卡(NAT模式)设置连接外网
  14. Unity射击游戏发射子弹的方法和提升流畅性的小技巧
  15. 安装file sync 工具 出现问题,报错提示点raw.githubusercontent.com
  16. 解决白盒、mock、性能、自动化测试脚本中的数据自动生成问题——Spock-Genesis
  17. oracle 删除数据
  18. 大数据学习的有哪些相关书籍
  19. memory:arm 分区layout以及虚拟内存布局-小结
  20. CV中直方图比较方法

热门文章

  1. 征信报告上的逾期记录应该怎么清除?
  2. 贷款时,如何评估借款人的还款意愿
  3. 恐怖与暴力美学 + 妖魔化:《人皮客栈》观看笔记
  4. VC++静态文本框/PICTURE控件的notify属性
  5. php去掉最后一个,号,织梦当前位置去除最后一个''符号
  6. java程序里繁体字显示为方块_网页 俄罗斯方块
  7. 人工神经网络——【BP】反向传播算法证明
  8. matlab实现unix时间戳到标准时间的转换
  9. 线程queue、事件event及协程
  10. 9. 弹出键盘挡住input