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. java经典算法40题-附带解决代码

    前一段时间工作比较闲,每天没有代码敲的日子有点无聊,于是为了保证自己的编程逻辑力的日常清醒,故百度了一些经典的java算法,然后自己思考编程解决问题,虽然那些东西比较基础了,但是有些题目小编看到了也是 ...

  2. SpringMVC学习(二)

    Ajax 简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分 ...

  3. 从零搭建Golang开发环境--go修仙序章

    1. 什么是go语言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态 .强类型.编译型语言 .Go 语 ...

  4. 64位系统 system32 和 syswow64

    \Windows\SysWOW64  文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit ) \Windows\System32  文件夹下存放6 ...

  5. Java知识系统回顾整理01基础04操作符07Scanner

    一.Scanner 需要用到从控制台输入数据时,使用Scanner类. 二.使用Scanner读取整数 注意: 使用Scanner类,需要在最前面加上 import java.util.Scanner ...

  6. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  7. P5664 Emiya 家今天的饭

    题面 link 前言 去年把我做自闭的一道题,看了一眼题面,发现只有 t1 有点思路,结果写到一半发现自己读错题了,又只能花时间来重构,结果后面的暴力一点都没写(主要是自己当时不会) 然后,这道题还因 ...

  8. mysql linux 命令行操作

    1. 登录mysql      mysql -u 用户名 -p    回车输入密码 

  9. Redis 的完整安装过程

    Windos 版本安装 Redis 官方并不支持 Window 版本,但是微软公司在 Github 上维护了一个 Windows 版本的 Redis 项目,供 Windows 用户下载使用. 下载地址 ...

  10. LVM创建及管理

    安装lvm yum install -y lvm yum install -y lvm