图腾计数
2015-10-11 18:32
218 查看
【Description】
whitecloth 最近参观了楼兰图腾。图腾的所在地有一排 N 个柱子,N
个柱子的高度恰好为一个 1 到 N 的排列,而楼兰图腾就隐藏在这些
柱子中。
由于 whitecloth 弱爆了,他只知道图腾由 3 个柱子组成,这三个柱子
组成了下凸或上凸的图形(>.<),所谓下凸,设三个柱子的高度从左
到右依次为 h1,h2,h3,那么 h1>h2,h3>h2,上凸则满足 h1<h2,
h3<h2。
现在 whitecloth 也找不到图腾具体是哪三个柱子,他只想知道满足这
两个形状的柱子有几组。
【Input】
第一行一个数 N
接下来一行 N 个数,依次表示每个柱子的高度
【Output】
一行两个数,表示下凸形状的数量和上凸形状的数量,用空格隔开
【Sample Input】
5
1 5 3 2 4
【Sample Output】
3 4
【Hint】对于 30%的数据,N<=100
对于 100%的数据,N<=200000
这道题其实就是一道裸的树状数组,知道一个柱的高度,他左边比他矮的个数乘以右侧比他矮的就是以他为中间柱的上凸形,同理可求得下凹形的。关键是知道怎么样计算出这些数值,没扫到一个位置,将他的高度压入树状数组,之后扫到一个位置i,lowbit(height(i))就知道了他左侧有多少比他矮,一共height(i)-1个比他矮的,也就知道了右边有多少比他矮,左侧一共i-1个数中有多少个比他矮知道了,左侧有多少个比他高也就知道了,右侧高的也就知道了,综上所述,可得到ANS。(中间过程记得开long long)。
View Code
whitecloth 最近参观了楼兰图腾。图腾的所在地有一排 N 个柱子,N
个柱子的高度恰好为一个 1 到 N 的排列,而楼兰图腾就隐藏在这些
柱子中。
由于 whitecloth 弱爆了,他只知道图腾由 3 个柱子组成,这三个柱子
组成了下凸或上凸的图形(>.<),所谓下凸,设三个柱子的高度从左
到右依次为 h1,h2,h3,那么 h1>h2,h3>h2,上凸则满足 h1<h2,
h3<h2。
现在 whitecloth 也找不到图腾具体是哪三个柱子,他只想知道满足这
两个形状的柱子有几组。
【Input】
第一行一个数 N
接下来一行 N 个数,依次表示每个柱子的高度
【Output】
一行两个数,表示下凸形状的数量和上凸形状的数量,用空格隔开
【Sample Input】
5
1 5 3 2 4
【Sample Output】
3 4
【Hint】对于 30%的数据,N<=100
对于 100%的数据,N<=200000
这道题其实就是一道裸的树状数组,知道一个柱的高度,他左边比他矮的个数乘以右侧比他矮的就是以他为中间柱的上凸形,同理可求得下凹形的。关键是知道怎么样计算出这些数值,没扫到一个位置,将他的高度压入树状数组,之后扫到一个位置i,lowbit(height(i))就知道了他左侧有多少比他矮,一共height(i)-1个比他矮的,也就知道了右边有多少比他矮,左侧一共i-1个数中有多少个比他矮知道了,左侧有多少个比他高也就知道了,右侧高的也就知道了,综上所述,可得到ANS。(中间过程记得开long long)。
#include<cstdio> #define MAXN 200050UL #define LL long long using namespace std; int n,sum[MAXN],h[MAXN]; int ni[MAXN]; LL aa,at; int lowbit(int x){ return x&(-x); } void update(int x){ while(x<=n){ sum[x]+=1; x+=lowbit(x); } return ; } int query(int x){ int fec=0; while(x>0){ fec+=sum[x]; x-=lowbit(x); } return fec; } int main(){ // freopen("count.in","r",stdin); // freopen("count.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&h[i]); ni[i]=h[i]-query(h[i]); int t=query(h[i]); at+=(LL)t*(LL)(h[i]-1-t); aa+=(LL)(i-1-t)*(LL)(n-h[i]-i+1+t); update(h[i]); } printf("%lld %lld",aa,at); getchar(); getchar(); getchar(); }
View Code
相关文章推荐
- actionscript与javascript交互(转载)
- C语言基础之变量的命名规则、定义常量、C的数据类型
- 三色二叉树
- HDU5441 Travel 离线并查集
- mybatis13 resultMap
- [Jsoi2010]连通数
- 飞机订票系统---缺陷报告
- SO 小记
- AOP系列(三)—Filter
- [Jsoi2010]连通数
- Andorid自动读取短信验证码
- 一些使用Android设备调试功能的注意事项(挖职位)
- 教主的花园
- 8.js模式-状态模式
- kali安装后配置
- 从工程中删除Cocoapods
- pandas 基础1
- 教主的花园
- 7.js模式-装饰者模式
- 大整数存储及运算——求100的阶乘