博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #261 (Div. 2) D 树状数组应用
阅读量:6113 次
发布时间:2019-06-21

本文共 919 字,大约阅读时间需要 3 分钟。

看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i<j,求有多少对这种(i,j)  ,i<j可是 i前面的合法个数 要大于j后面的 看起来非常像逆序数的样子,所以非常easy往树状数组想去,可是处理就看个人了,像我比赛的时候就处理得非常的麻烦,虽做出了可是花时间也多,经过杰哥的教育,事实上正着塞进树状数组 反着来找就能够了,灰常的简单清晰明了,贴一发纪念我的搓比...

int n;int aa[1000000 + 55];int bb[1000000 + 55];int c[1000000 + 55];map
mp;ll lowbit(ll x) { return x&(-x);}void add(int i,int val) { while(i <= n) { c[i] += val; i += lowbit(i); }}ll get_sum(int i) { ll sum = 0; while(i) { sum += c[i]; i -= lowbit(i); } return sum;}void init() { memset(c,0,sizeof(c)); memset(aa,0,sizeof(aa)); memset(bb,0,sizeof(bb)); mp.clear();}int main() { while(scanf("%d",&n) == 1) { init(); for(int i=1;i<=n;i++)scanf("%d",&aa[i]); for(int i=1;i<=n;i++) { mp[aa[i]]++; bb[i] = mp[aa[i]]; add(bb[i],1); } mp.clear(); ll ans = 0ll; for(int i=n;i>=1;i--) { add(bb[i],-1); mp[aa[i]]++; int tmp = mp[aa[i]]; ans += i - get_sum(tmp) - 1; } cout<
<

转载地址:http://hwcka.baihongyu.com/

你可能感兴趣的文章
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>
Porter/Duff,图片加遮罩setColorFilter
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>
Python/PHP 远程文件/图片 下载
查看>>
【原创】一文彻底搞懂安卓WebView白名单校验
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>