题目大意:给定一个长度为 N 的序列,从序列中任意挑出三个数,求满足中间的数字值最小(最大)有多少种情况。

题解:建立在值域上的树状数组,从左到右扫描一遍序列,统计出每个点左边有多少个数大于(小于)该点的值,再从右到左扫描一遍序列,统计出每个点右边有多少个数大于(小于)自己,最后计算答案贡献即可。

代码如下

#include <bits/stdc++.h>
#define cls(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&-x
#define all(x) x.begin(),x.end()
using namespace std;
const int maxn=2e5+10; inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
} int n,a[maxn],bit[maxn],left1[maxn],left2[maxn],right1[maxn],right2[maxn];
long long ans1,ans2; void read_and_parse(){
n=read();
for(int i=1;i<=n;i++)a[i]=read();
} inline void modify(int x,int val){
for(int i=x;i<=n;i+=lowbit(i))bit[i]+=val;
}
inline int query(int x){
int ans=0;
for(int i=x;i;i-=lowbit(i))ans+=bit[i];
return ans;
} void solve(){
for(int i=1;i<=n;i++){
left1[i]=query(a[i]-1);
left2[i]=query(n)-query(a[i]);
modify(a[i],1);
}
cls(bit,0);
for(int i=n;i>=1;i--){
right1[i]=query(a[i]-1);
right2[i]=query(n)-query(a[i]);
modify(a[i],1);
}
for(int i=1;i<=n;i++)ans1+=(long long)left2[i]*right2[i],ans2+=(long long)left1[i]*right1[i];
printf("%lld %lld\n",ans1,ans2);
} int main(){
read_and_parse();
solve();
return 0;
}

【CH4201】楼兰图腾的更多相关文章

  1. CH4201 楼兰图腾

    题意 4201 楼兰图腾 0x40「数据结构进阶」例题 描述 在完成了分配任务之后,西部314来到了楼兰古城的西部.相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀('V'), ...

  2. TYVJ1432 楼兰图腾

    Description 平面上有 N(N≤[10]^5 ) 个点,每个点的横.纵坐标的范围都是 1~N,任意两个点的横.纵坐标都不相同.若三个点 (x_1,y_1),(x_2,y_2),(x_3,y_ ...

  3. AcWing:241. 楼兰图腾(树状数组逆序对)

    在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自 ...

  4. AcWing 241. 楼兰图腾 (树状数组)打卡

    题目:https://www.acwing.com/problem/content/description/243/ 题意:给你n个点,问你 V 和  ^的图腾有多少个 思路:比如V 其实就是找当前点 ...

  5. AcWing 241 楼兰图腾 (树状数组)

    在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀('V'),一个部落崇拜铁锹('∧'),他们分别用V和∧的形状来代表各自 ...

  6. tyvj 1432 楼兰图腾

    树状数组 本题数据有误 对于每一个点用权值树状数组维护在这个点之后之前的比他大和比他小的数 #include <iostream> #include <cstdio> #inc ...

  7. AcWing 241.楼兰图腾 (树状数组,逆序对)

    题意:在二维坐标轴上给你一些点,求出所有由三个点构成的v和∧图案的个数. 题解:因为给出的点是按横坐标的顺序给出的,所以我们可以先遍历然后求出某个点左边比它高和低的点的个数(这个过程简直和用树状数组求 ...

  8. AcWing 241. 楼兰图腾

    #include<bits/stdc++.h> using namespace std; const int N=2e5+5; typedef long long ll; ll ans,l ...

  9. String Reversal

    Educational Codeforces Round 96 (Rated for Div. 2) - E. String Reversal 跳转链接 题目描述 定义一个操作为交换字符串中相邻的两个 ...

随机推荐

  1. 20155203 杜可欣《网络对抗技术》Exp1 PC平台逆向破解

    1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,ge ...

  2. 20155317王新玮《网络对抗》Exp2 后门原理与实践

    20155317王新玮<网络对抗>Exp2 后门原理与实践 一.实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划 ...

  3. C语言如何向系统接要存

    C语言如何向系统接要存,就有这么三种方式: 1.向栈要. 2.向堆要. 3.向数据段要. 这一下就扯出了三种内存空间,内存空间的本质是一样的,一个地址对应一个方框,方框里可以放数据.但是为了更好的去 ...

  4. 【技巧】如何清空SQLServer的日志文件

    一.应用场景 在一次项目实施的过程中,发现一个小问题,在开发环境中备份下来的数据库大约15G,压缩后更小一些,但是在另外一台设备上部署的时候,发现总是提示空间不足.通过查询发现数据库的日志文件比较大, ...

  5. Golang Context 详细介绍

    Golang context 本文包含对context实现上的分析和使用方式,分析部分源码讲解比价多,可能会比较枯燥,读者可以直接跳过去阅读使用部分. ps: 作者本着开源分享的精神撰写本篇文章,如果 ...

  6. Vue.js 相关知识(动画)

    1. 简介 Vue 在插入.更新或移除 DOM 时,提供多种不同方式的过渡效果,并提供 transition 组件来实现动画效果(用 transition 组件将需执行过渡效果的元素包裹) 语法:&l ...

  7. 微软职位内部推荐-SW Engineer II for WinCE

    微软近期Open的职位: Do you have a passion for embedded devices and services? &nbsp Does the following m ...

  8. 第十七次ScrumMeeting博客

    第十七次ScrumMeeting博客 本次会议于12月7日(四)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...

  9. 解决p4c安装时protobuf未定义引用的错误

    安装好p4c的依赖之后,执行make -j2时出现以下问题: undefined references to `google::protobuf::internal::LogMessage::oper ...

  10. Day Ten

    站立式会议 站立式会议内容总结 331 今天:话题单选对话框 遇到问题:无 442 今天:数据库交互,解决timepicker问题 遇到的问题:无 439 今天:测试模块功能 遇到问题:无 会议照片 ...