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 ...
随机推荐
- Windows xp IIS显示403错误解决方案
XP的IIS很烦人,很多限制. 最近一客户用XP安装IIS,总提示:403.9 错误 连接的用户过多 解决方案: 1)安装IIS配置工具 下载地址:http://download.microsoft. ...
- java消息推送与接收
package com.zl; import java.net.ServerSocket; import java.net.Socket; import org.apache.commons.mvc. ...
- 解决php的“It is not safe to rely on the system’s timezone settings”问题
PHP调试的时候出现了警告: It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题. 实 际上,从PHP 5 ...
- ssh远程连接错误
在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...
- .NET微信通过授权获取用户的基本信息
一.填写授权回调页面的域名 二.引导用户到指定的授权页面 例如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID& ...
- IOCP简单实现
本人工作是服务端性能测试,因工作需要开发机器人框架,选用底层的时候看到网上满大街的IOCP介绍,还有说IOCP比WSAAsyncSelect复杂等等,所以只好转WSAAsyncSelect实现. 因并 ...
- 通过DOM节点操作来获取表单信息
这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的 ...
- Python偏函数
偏函数 一个带n 个参数,curried 的函数固化第一个参数为固定参数,并返回另一个带n-1 个参数函数对象 >>> from functools import partial & ...
- 5.Integer to Roman && Roman to Integer
Roman chart: http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm Integer to Roman Given an inte ...
- iOS开发--一些UITabBarItem属性的设置[转]
1.改变UITabBarItem 字体颜色 [[UITabBarItemappearance]setTitleTextAttributes:[NSDictionary dictionaryWithOb ...