cdoj 841 休生伤杜景死惊开 逆序数/树状数组
休生伤杜景死惊开
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
陆伯言军陷八卦阵之中,分明只是一条直路,却怎的也走不到尽头。阵中尽是石堆,以某一石堆为参考,无论向走还是向右,总是会回到出发的石堆,最后幸得一黄姓老翁带路才得脱出。
陆伯言逃离八卦阵后,来到山顶观察此阵,记从左往右第i堆石堆的高度为Ai,发现任何两堆较矮的石堆都能和它们之间的一座较高的石堆形成"八卦锁",将其中之人牢牢锁住,无从逃脱。
根据石堆的情况,陆伯言大致计算了“八卦锁”的数量(即 Ai<Aj>Ak,i<j<k 的组合数),不禁心中一惊,对孔明惊为天人,遂放弃追击,收兵回吴。
“有劳岳父了。” “为何将其放走?” “...一表人才,何必浪费于此。”
Input
第一行一个整数n,表示石堆堆数。
接下来一行,n个整数,第i个数表示从左到右第i堆石堆的高度Ai。
1≤n≤50000,1≤Ai≤32768
Output
一个整数,“八阵锁”的数目。
Sample input and output
Sample Input
5
1 2 3 4 1
Sample Output
6
题意:
让你寻找多少对满足i<j<k,a[i]<a[j],a[j]>a[k]
题解
我们对于每一个数,直接去寻找看在这个数前面,有多少个数比这个数小,在这个数后面,有多少个数比这个数下,然后乘起来相加就好啦
利用树状数组或者线段树啥,归并都能做到logn的时间搞定
~\(≧▽≦)/~啦啦啦
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 100001
#define mod 10007
#define eps 1e-9
const int inf=0x7fffffff; //无限大
/*
inline ll read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
*/
//**************************************************************************************
int d[maxn];
int c[maxn];
int n;
int t;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int lowbit(int x)
{
return x&-x;
} void update(int x,int y)
{
while(x<=t)
{
d[x]+=y;
x+=lowbit(x);
}
}
int sum(int x)
{
int s=;
while(x>)
{
s+=d[x];
x-=lowbit(x);
}
return s;
}
int num[maxn];
int main()
{
n=read();
for(int i=;i<n;i++)
{
num[i]=read();
t=max(t,num[i]);
}
ll ans1[maxn],ans2[maxn];
ll ans=;
for(int i=;i<n;i++)
{
ans1[i]=sum(num[i]-);
update(num[i],);
}
memset(d,,sizeof(d));
for(int j=n-;j>=;j--)
{
ans2[j]=sum(num[j]-);
update(num[j],);
}
for(int i=;i<n;i++)
{
ans+=ans1[i]*ans2[i];
//cout<<ans1[i]<<" "<<ans2[i]<<endl;
}
cout<<ans<<endl;
}
cdoj 841 休生伤杜景死惊开 逆序数/树状数组的更多相关文章
- cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】
http://acm.uestc.edu.cn/#/problem/show/841 休生伤杜景死惊开 Time Limit: 3000/1000MS (Java/Others) Memory ...
- CDOJ 842 天下归晋 树状数组
天下归晋 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/842 Descrip ...
- cdoj 1342 郭大侠与甲铁城 树状数组+离线
郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- cdoj 383 japan 树状数组
Japan Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/383 Descrip ...
- CDOJ 838 母仪天下 树状数组 (2014数据结构专题
母仪天下 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/838 Descrip ...
- [cdoj 1344]树状数组区间加等差数列
题目链接:http://acm.uestc.edu.cn/#/problem/show/1344 区间加等差数列本质上就是区间修改区间查询,本来想用线段树做,结果这个题就是卡空间和时间……不得已学了区 ...
- 懂,你的App生,不懂,死!
近期有一些开发人员.创业公司的人加我微信viyi88,咨询一些关于自己App的事情.被问得最多的可能就是:"我的App怎样推广添加下载量?"而且信誓旦旦地说自己的App做得非常好, ...
- 2014 UESTC暑前集训数据结构专题解题报告
A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集 ...
- ZJOI2019一轮停课刷题记录
Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...
随机推荐
- C#基础学习之StreamReader和StreamWriter
StreamReader和StreamWriter操作字符的 FileStream操作字节的 //使用StreamReader读取文件 using (StreamReader sr=new Strea ...
- setInterval做定时器
<script src="/js/jquery-1.8.3.min.js"></script> <script> $(function () { ...
- C# 浅谈 接口(Interface)的作用
继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的 1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法 ...
- 洛谷P3385负环
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- 洛谷P2279消防局的设立
传送门啦 一个很摸不清头脑的树形dp 状态: $ dp[i][0] $ :选自己 $ dp[i][1] $ :选了至少一个儿子 $ dp[i][2] $ :选了至少一个孙子 ------------- ...
- elasticsearch5.5
1.不能以root用户运行 groupadd es #增加es组 useradd es -g es -p pwd #增加es用户并附加到es组 chown -R e ...
- SQL 标量函数-----日期函数 day() 、month()、year()
select day(createtime) from life_unite_product --取时间字段的天值 select month(createtime) from life_unite_p ...
- CentOS下编译安装python包管理安装工具pip教程
ubuntu 安装pip 代码如下: apt-get install python-pip 安装requests, pip install requests 对于centos的,直接 yum inst ...
- InterSystems Ensemble学习笔记(一) Ensemble介绍及安装
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...
- Metronic 5.0.5 bootstrap后台管理模板
演示地址:http://keenthemes.com/preview/metronic/ 下载 Dashboard Table