hdu 5792(树状数组,容斥) World is Exploding
要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况。
先用树状数组求出lx[i](在第 i 个数左边的数中比它小的数的个数),ld[i](在第 i 个数左边的数中比它大的数的个数),rx[i](在第 i 个数右边的数中比它小的数的个数)
,rd[i](在第 i 个数右边的数中比它大的数的个数)。然后重复的情况无非就是题目中a与c重合(rx[i]*rd[i]),a与d重合(rd[i]*ld[i]),b与c重合(lx[i]*rx[i]),b与
d重合(lx[i]*ld[i])
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std; typedef long long ll;
const int M = 5e4 + ;
int a[M],b[M],bit[M],has[M];
ll ld[M],lx[M],rd[M],rx[M]; int lowbit(int x){return x&-x;} int sum(int x){
int ret=;
while (x>)
ret+=bit[x],x-=lowbit(x);
return ret;
} void add(int x,int d){
while (x<=M)
bit[x]+=d,x+=lowbit(x);
} int main()
{
int n;
while (~scanf("%d",&n)){
for (int i= ; i<=n ; i++) scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b+n+);
int m=unique(b+,b+n+)-b;
//cout<<m<<endl;
m--;
for (int i= ; i<=n ; i++){
a[i]=lower_bound(b+,b+m+,a[i])-b;
}
memset(lx,,sizeof(lx));
memset(ld,,sizeof(ld));
memset(rd,,sizeof(rd));
memset(rx,,sizeof(rx));
memset(bit,,sizeof(bit));
memset(has,,sizeof(has));
ll ans=,ans1=,ans2=;
//cout<<"xx"<<endl;
for (int i= ; i<=n ; i++){
has[a[i]]++;
lx[i]=sum(a[i]-);
ld[i]=(i-has[a[i]])-lx[i];
add(a[i],);
}
memset(bit,,sizeof(bit));
memset(has,,sizeof(has));
for (int i=n ; i>= ; i--){
has[a[i]]++;
rx[i]=sum(a[i]-);
rd[i]=(n-i+-has[a[i]])-rx[i];
add(a[i],);
ans1+=rx[i];
ans2+=rd[i];
}
ans=ans1*ans2;
for (int i= ; i<=n ; i++){
ans-=rd[i]*ld[i];
ans-=rx[i]*lx[i];
ans-=rd[i]*rx[i];
ans-=ld[i]*lx[i];
}
printf("%I64d\n",ans);
}
return ;
}
hdu 5792(树状数组,容斥) World is Exploding的更多相关文章
- 【BZOJ4361】isn 动态规划+树状数组+容斥
[BZOJ4361]isn Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案, ...
- bzoj4361 isn (dp+树状数组+容斥)
我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn) ...
- BZOJ.4361.isn(DP 树状数组 容斥)
题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...
- hdu 5792 树状数组+离散化+思维
题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...
- 【BZOJ 4361】 4361: isn (DP+树状数组+容斥)
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 218 Solved: 126 Description 给出一个长度为n的序列A( ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2852 (树状数组+无序第K小)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小 ...
- HDU 4911 (树状数组+逆序数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...
随机推荐
- .Net操作Excel
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用. .Net导出代码: /// <summ ...
- List<T>线性查找和二分查找BinarySearch效率分析
今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式. 线性查找:Contains,Find,IndexOf都是线性查找. 二分查找:Bin ...
- 国内首家VR虚拟现实主题公园即将在北京推出
近期,美国“The VOID”.澳洲“Zero Latency”两大虚拟现实主题乐园让许多爱好者兴奋至极,门票据说都已经预约到明年2月!在如此巨大的商机面前,谁将抢到国内VR虚拟现实主题公园第一块蛋糕 ...
- [Toolchain]arm-none-linux-gnueabin编译
http://blog.sina.com.cn/s/blog_a000da9d0101436p.html
- 原生+jquery 实现好看滚动条。
//原生 <!doctype html> <html> <head> <meta charset="utf-8"> <titl ...
- 黄聪:wordpress向一个页面POST数据,出现404页面访问不了
出现这个情况,说明POST的数据中存在一些关键词,触发调用了page以外的模版.比如POST数据中有 name , author 等参数. 解决办法,就是把这些参数改一下名称.
- codeforces 659 G. Fence Divercity 组合数学 dp
http://codeforces.com/problemset/problem/659/G 思路: f(i,0/1,0/1) 表示到了第i个,要被切的块开始了没有,结束了没有的状态的方案数 递推看代 ...
- 命令查看java的class字节码文件、verbose、synchronize、javac、javap
查看Java字节码 1 javac –verbose查看运行类是加载了那些jar文件 HelloWorld演示: public class Test { public static void main ...
- Dynamics Webservice Call with Credential
Dynamics Webservice call with credential /// <summary> ///WebServiceHelper 的摘要说明 /// </summ ...
- 【转载】JMeter学习(一)工具简单介绍
JMeter学习(一)工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静 ...