在完成了分配任务之后,西部314来到了楼兰古城的西部。

相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自部落的图腾。

西部314在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了N个点,经测量发现这N个点的水平位置和竖直位置是两两不同的。

西部314认为这幅壁画所包含的信息与这N个点的相对位置有关,因此不妨设坐标分别为(1,y1),(2,y2),…,(n,yn)(1,y1),(2,y2),…,(n,yn),其中y1y1~ynyn是1到n的一个排列。

西部314打算研究这幅壁画中包含着多少个图腾。

如果三个点(i,yi),(j,yj),(k,yk)(i,yi),(j,yj),(k,yk)满足1≤i<j<k≤n且yi>yj,yj<yk1≤i<j<k≤n且yi>yj,yj<yk,则称这三个点构成V图腾;

如果三个点(i,yi),(j,yj),(k,yk)(i,yi),(j,yj),(k,yk)满足1≤i<j<k≤n且yi<yj,yj>yk1≤i<j<k≤n且yi<yj,yj>yk,则称这三个点构成∧图腾;

西部314想知道,这n个点中两个部落图腾的数目。

因此,你需要编写一个程序来求出V的个数和∧的个数。

输入格式

第一行一个数n。

第二行是n个数,分别代表y1,y2,…,yny1,y2,…,yn。

输出格式

两个数,中间用空格隔开,依次为V的个数和∧的个数。

数据范围

对于所有数据,n≤200000n≤200000,且输出答案不会超过int64。

输入样例:

5
1 5 3 2 4

输出样例:

3 4不明白为什么不需要离散化代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<cmath>
const int maxn=2e5+5;
typedef long long ll;
using namespace std;
struct node
{
int l,r;
int num;
}tree[maxn<<2];
vector<int>v;
int a[maxn];
void pushup(int m)
{
tree[m].num=(tree[m<<1].num+tree[m<<1|1].num);
}
void build(int m,int l,int r)
{
tree[m].l=l;
tree[m].r=r;
tree[m].num=0;
if(l==r)
{
return ;
}
int mid=(tree[m].l+tree[m].r)>>1;
build(m<<1,l,mid);
build(m<<1|1,mid+1,r);
}
void update(int m,int pos,int val)
{
if(tree[m].l==tree[m].r)
{
tree[m].num+=val;
return;
}
int mid=(tree[m].l+tree[m].r)>>1;
if(pos<=mid)
{
update(m<<1,pos,val);
}
else
{
update(m<<1|1,pos,val);
}
pushup(m);
}
int query(int m,int l,int r)
{
if(tree[m].l==l&&tree[m].r==r)
{
return tree[m].num;
}
int mid=(tree[m].l+tree[m].r)>>1;
if(r<=mid)
{
return query(m<<1,l,r);
}
else if(l>mid)
{
return query(m<<1|1,l,r);
}
else
{
return query(m<<1,l,mid)+query(m<<1|1,mid+1,r);
}
}
ll minl[maxn],minr[maxn],maxl[maxn],maxr[maxn];
int main()
{
int n;
cin>>n;
for(int t=1;t<=n;t++)
{
scanf("%d",&a[t]);
}
build(1,0,n+1);
for(int t=1;t<=n;t++)
{
minl[t]=query(1,0,a[t]-1);
maxl[t]=query(1,a[t]+1,n+1);
update(1,a[t],1);
}
build(1,0,n+1);
for(int t=n;t>=1;t--)
{
minr[t]=query(1,0,a[t]-1);
maxr[t]=query(1,a[t]+1,n+1);
update(1,a[t],1);
}
ll ans1=0,ans2=0;
for(int t=1;t<=n;t++)
{
ans1+=maxl[t]*maxr[t];
ans2+=minl[t]*minr[t];
}
printf("%lld %lld\n",ans1,ans2);
system("pause");
return 0;
}

转载于:https://www.cnblogs.com/Staceyacm/p/11333463.html

楼兰图腾(权值线段树)相关推荐

  1. 【bzoj2770】YY的Treap 权值线段树

    题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...

  2. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  3. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  4. codevs1688 求逆序对(权值线段树)

    1688 求逆序对  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给定一个序列a1,a2,-,an,如 ...

  5. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】

    题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...

  6. HDU-5249 KPI(STL or 权值线段树)

    题目链接 Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度.数十亿的请求被推到一个大管道后同时服务从管头拉取请求.让我们来定义每个请 ...

  7. Governing sand(权值线段树/主席树)

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 65536K,其他语言13107 ...

  8. Minimum Inversion Number HDU - 1394(权值线段树/树状数组)

    The inversion number of a given number sequence a1, a2, -, an is the number of pairs (ai, aj) that s ...

  9. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)

    之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...

最新文章

  1. POJ-2746:约瑟夫问题(Java版)
  2. [远航笔记流水账]易大漠多线程初级教程086(1-3)
  3. FreeSql (十八)导航属性
  4. android 线程传递数据,Android Handle主线程向子线程发送数据
  5. Keras 中的循环神经网络 (RNN)
  6. BGP十三条选路原则
  7. Linux中GoogleChrome谷歌浏览器安装好了打不开怎么办?
  8. 2022网易校招易计划在线课程
  9. 安卓各版本大变化(Android 6.0到10.0),兼容适配
  10. worldpress怎么增加登录注册按钮
  11. 在谷歌chrome中打开、编辑、保存金山 WPS Office完美解决方案!
  12. Linux查看机器的运行情况
  13. 爬虫ip代理对高匿代理ip的重要性
  14. 我欲封神——JAVA封神之路
  15. 步进电机的计算机控制系统设计,基于计算机并口的步进电机控制系统设计
  16. vue-router 快速返回上一页
  17. 数据结构排序-7-3 点赞狂魔 (25 分)
  18. Rancher通过Aliyun-slb服务对接阿里云SLB教程 1
  19. adlds文件服务器,WinServer2008之ADLDS轻型目录服务解析
  20. 学术资源不定期分享-【费曼物理学讲义英文原版】

热门文章

  1. jsp tag 自定义标签实现按钮的显示
  2. Python+Opencv寻找图像中最亮的区域
  3. [机器学习]AutoML --- NNI (Microsoft)
  4. 【Ubuntu-apt-换源】ubuntu系统换源后使用apt-get update时一直0%[执行中]
  5. 阿里巴巴2018年纳税516亿元,稳居行业第一名,大家怎么看?
  6. 只有房子没有工作能贷款吗?
  7. 互联网产品初期需求确定与数据库模型设计——基于Visio和Xmind
  8. 字符动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图
  9. asp mysql insert_用asp把表单数据插入数据库的2种常用方法
  10. 利用matlab实现SAR 图像线性拉伸显示