Codeforce 61 E. Enemy is weak 解析(思維、離散化、BIT、線段樹)

今天我們來看看CF61E

題目連結

題目

給一個數列\(a\),求有多少\((i,j,k)\),\(i<j<k\),使得\(a[i]>a[j]>a[k]\)

前言

學到BIT的新用法

想法

首先可能會想到要枚舉\(j\),而我們只要知道\(a[j]\)前有多少比較大的元素,\(a[j]\)後有多少比較少的元素就好。

單調棧只能得到一個元素的位置,似乎用不了。而既然我們只需要知道有多少元素而不需要知道精確位置,我們可能會想到要維護每個數字出現過的次數,而\(\sum\limits_{k>a[j]}cnt[k]\)就是\(a[j]\)左邊比較大的數字的數量了。

而維護前綴和自然會使用BIT或線段樹了。

當然由於\(a[i]\le1e9\),我們需要把\(a\)複製到新數列中,並且排序,如此一來我們就可以把\(a[i]\)重新編號到範圍\([1,n]\)裡,而需要得知這個新編號,可以直接\(upper\_bound\)(詳見code)。

程式碼:

const int _n=1e6+10;
int t,tt,n,a[_n],l[_n],r[_n];
VI Li;
ll ans;
namespace BIT{
int nn;ll t[_n];
void update(int x){while(x<=nn)t[x]++,x+=(x&-x);}
ll query(int x){ll res=0;while(x>0){res+=t[x],x-=(x&-x);}return res;}
void init(int n_){nn=n_;}
void clear(){rep(i,0,nn+1)t[i]=0;}
}
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n;rep(i,1,n+1){cin>>a[i];Li.pb(a[i]);} sort(all(Li));BIT::init(n);
per(i,1,n+1){
t=upper_bound(all(Li),a[i])-Li.begin();
r[i]=BIT::query(t-1),BIT::update(t);
}BIT::clear();
rep(i,1,n+1){
t=n-(upper_bound(all(Li),a[i])-Li.begin())+1;
l[i]=BIT::query(t-1),BIT::update(t);
}rep(i,1,n+1)ans+=1ll*l[i]*r[i];
cout<<ans<<'\n';
return 0;
}

標頭、模板請點Submission看

Submission

E. Enemy is weak 解析(思維、離散化、BIT、線段樹)的更多相关文章

  1. D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)

    Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...

  2. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

  3. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

  4. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

  5. E. Tree Queries 解析(思維、LCA)

    Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...

  6. E. Xenia and Tree 解析(思維、重心剖分)

    Codeforce 342 E. Xenia and Tree 解析(思維.重心剖分) 今天我們來看看CF342E 題目連結 題目 給你一棵樹,有兩種操作,把某點標成紅色或者查詢離某點最近的紅點有多遠 ...

  7. A. Peter and Snow Blower 解析(思維、幾何)

    Codeforce 613 A. Peter and Snow Blower 解析(思維.幾何) 今天我們來看看CF613A 題目連結 題目 給你一個點\(P\)和\(n\)個點形成的多邊形(照順或逆 ...

  8. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  9. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

随机推荐

  1. 一文了解.Net Core 3.1 Web API基础知识

    一.前言 随着近几年前后端分离.微服务等模式的兴起,.Net Core也似有如火如荼之势 ,自16年发布第一个版本到19年底的3.1 LTS版本,以及将发布的.NET 5,.NET Core一路更迭, ...

  2. 虚拟机CentOS开机黑屏解决方案

    默认配置 错误: 1.直接就是黑屏,连杠杠都没有 2.centos系统关不掉 3.关闭vmware提示:虚拟机XXX繁忙 解决方案一: 1.以管理员身份运行cmd控制台程序 2.在cmd窗口中输入ne ...

  3. NMAP类型题目 (escapeshellarg,escapeshellcmd使用不当)

    [BUUCTF 2018]Online Tool 给出了源码 审计 <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER[' ...

  4. Istio 运维实战系列(3):让人头大的『无头服务』-下

    本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...

  5. 不知如何创建UML电路图?看看本文

    Visual Paradigm是包含设计共享.线框图和数据库设计新特性的企业项目设计工具.现在你只需要这样单独的一款模型软件 Visual Paradigm就可以完成用UML设计软件,用BPMN去执行 ...

  6. 「ExLucas」学习笔记

    「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...

  7. 02 C语言最简单快速上手的IDE

    不要让开发环境 成为学习路上的拦路虎,先培养学习兴趣和学习路上的成就感,这个对于激励自己持续学习很重要. 等真正从小白入门了,甚至成为大牛了,能解决诸多困难问题了,安装个开发环境还会再是个什么难事吗? ...

  8. 【题解】 [EZEC-4]求和

    对于百分之十的数据:随便过. 下面推式子: \[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j} \] \[=\sum_{d=1}^n\sum_{i=1}^n\sum_{ ...

  9. tuple的增删改查

    dict = {"k1": "v1", "k2": "v2", "k3": "v3&quo ...

  10. mycat 全局表

    全局表的作用 在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性: 变动不频繁 数据量总体变化不大 数据规模不大,很 ...