Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组
题意:给出数组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 --树状数组相关推荐
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)
题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和X ...
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity (hash+数状数组)
这个题,做出来的人很多,我感觉是数据不够强,我看了很多人的代码直接暴力也能过了,直接暴力如果数据够强的话肯定是时间超限,边缘数据不够强.如果和上次一样估计很多人的E会GG.我看到一位OIdalao的代 ...
- Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树
传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici,要求你给每个边赋一个权值kik_iki,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...
- Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...
- Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树
传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn的一个独立集. (2)(2)(2)找出 ...
- 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 ...
- 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 ...
- Codeforces Round #686 (Div. 3) F. Array Partition(二分+线段树)
题意:一段区间,让你分割成三段,第一段取max,第二段取min,第三段取max.问你怎么分割这个区间. 题解: 三个区间我们可以用两个点将一段区间分成三段区间. 二分:我们首先找这个题有关的单调性,我 ...
- Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥
传送门 文章目录 题意: 思路: 题意: 给你一颗基环树,求长度>=1>=1>=1的路径个数. 思路: 先考虑一棵树,他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2} ...
最新文章
- open python语言实现 pdf_使用python操作Pdf代码实现
- 如何进行服务器备份操作系统,如何在Linux服务器上做备份和恢复
- 使用Express和MongoDB构建简单的CRUD应用程序
- jqueryvar语句_你真的掌握变量和类型了吗
- Java计算的XML面试题
- 由脚本创建的新元素事件不触发和用的easyUI插件中的多选框不起作用的解决方法...
- Win10编译SqlCipher步骤
- 用 JSON和userData 更全面的模拟 localStorage
- 【深入浅出通信原理-学习笔记】天线技术
- 无法启动此程序因为计算机丢失d3dx9,无法启动此程序.因为计算机中丢失d3dx9_43.dll.尝试重新安装改程序以解决问题...
- 纯干货分享,2021年阿里巴巴社招面试题总结,本人上周已成功入职!
- Coding(码市)教程(一):基础配置
- 虚拟机网卡(NAT模式)设置连接外网
- Unity射击游戏发射子弹的方法和提升流畅性的小技巧
- 安装file sync 工具 出现问题,报错提示点raw.githubusercontent.com
- 解决白盒、mock、性能、自动化测试脚本中的数据自动生成问题——Spock-Genesis
- oracle 删除数据
- 大数据学习的有哪些相关书籍
- memory:arm 分区layout以及虚拟内存布局-小结
- CV中直方图比较方法