TYVJ1432 楼兰图腾
Description
若三个点 (x_1,y_1),(x_2,y_2),(x_3,y_3 ) 满足 x_1<x_2<x_3, y_1>y_2 并且 y_3>y_2,则称这三个点构成"v"字图腾。
若三个点 (x_1,y_1),(x_2,y_2),(x_3,y_3 ) 满足 x_1<x_2<x_3, y_1<y_2 并且 y_3<y_2,则称这三个点构成"^"字图腾。
求平面上"v"和"^"字图腾的个数。
Input
第二行是n个数,分别代表y1,y2……yn
Output
Sample Input
5
1 5 3 2 4
Sample Output
3 4
这题乍一看水题,暴力O(n^2)好像可以过
仔细算就会发现,不行!!!
那我们就需要一种O(nlogn),甚至O(n)的算法
看“v”和“^”的满足条件有一些是不是很像线段树求逆序对呢
逆序对求法(线段树):逆序对
(其实我也不知道为什么,队测时自然想到线段树,没敢敲(吐血),错估了时间复杂度,以为是不如暴力的O(n^2logn))
还有一点,至少乘法原理你得想到吧,不知道的自己去学
先给暴力做法:
#include<cstdio>
int n,m,d[];long long ans1,ans2;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&d[i]);
for(int i=;i<=n;i++)
{
int lx=,rx=,ll=,rr=;
for(int j=;j<i;j++)
if(d[j]<d[i])lx++;
else ll++;
for(int j=i+;j<=n;j++)
if(d[j]<d[i])rx++;
else rr++;
ans1+=ll*rr;
ans2+=lx*rx;
}
printf("%lld %lld",ans1,ans2);
}
这个是最朴实无华的暴力了(TLE大法)
请看这句话(每个点的横、纵坐标的范围都是 1~N)
依据这个,可以小小优化暴力,下面给出暴力优化(并没有什么用,依然是TLE大法):
#include<cstdio>
int n,m,d[];long long ans1,ans2;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&d[i]);
for(int i=;i<=n;i++)
{
int lx=,ll=;
for(int j=;j<i;j++)
if(d[j]<d[i])ll++;
else lx++;
ans1+=ll*(d[i]--ll);
ans2+=lx*(n-d[i]-lx);
}
printf("%lld %lld",ans2,ans1);
}
以上纯属娱乐,相信大家都会写
那个优化可有用,那么让我们来看正解吧
线段树(或树状数组)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,ans1,ans2;long long ans0,ans;
struct oo{int a,b,v;}s[];
void build(int x,int l,int r)
{
s[x].a=l,s[x].b=r;
if(l==r)return ;
build(x<<,l,l+r>>);
build(x<<|,(l+r>>)+,r);
}
void change(int x,int y)
{
s[x].v++;
if(s[x].a==s[x].b)return ;
int mid=s[x].a+s[x].b>>;
if(y<=mid)change(x<<,y);
else change(x<<|,y);
}
void get(int x,int y)
{
if(y>s[x].b){ans1+=s[x].v;return ;}
if(y<s[x].a){ans2+=s[x].v;return ;}
if(s[x].a==s[x].b)return ;
get(x<<,y);get(x<<|,y);
}
int main()
{
scanf("%d",&n);
build(,,);
for(int i=,x;i<=n;i++)
{
ans1=ans2=;
scanf("%d",&x),change(,x);
get(,x);
ans0+=ans1*(x--ans1),ans+=ans2*(n-x-ans2);
}
printf("%lld %lld",ans,ans0);
}
很短吧!!
祝大家早日AC!!!
TYVJ1432 楼兰图腾的更多相关文章
- CH4201 楼兰图腾
题意 4201 楼兰图腾 0x40「数据结构进阶」例题 描述 在完成了分配任务之后,西部314来到了楼兰古城的西部.相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀('V'), ...
- AcWing:241. 楼兰图腾(树状数组逆序对)
在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自 ...
- AcWing 241. 楼兰图腾 (树状数组)打卡
题目:https://www.acwing.com/problem/content/description/243/ 题意:给你n个点,问你 V 和 ^的图腾有多少个 思路:比如V 其实就是找当前点 ...
- AcWing 241 楼兰图腾 (树状数组)
在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀('V'),一个部落崇拜铁锹('∧'),他们分别用V和∧的形状来代表各自 ...
- 【CH4201】楼兰图腾
题目大意:给定一个长度为 N 的序列,从序列中任意挑出三个数,求满足中间的数字值最小(最大)有多少种情况. 题解:建立在值域上的树状数组,从左到右扫描一遍序列,统计出每个点左边有多少个数大于(小于)该 ...
- tyvj 1432 楼兰图腾
树状数组 本题数据有误 对于每一个点用权值树状数组维护在这个点之后之前的比他大和比他小的数 #include <iostream> #include <cstdio> #inc ...
- AcWing 241.楼兰图腾 (树状数组,逆序对)
题意:在二维坐标轴上给你一些点,求出所有由三个点构成的v和∧图案的个数. 题解:因为给出的点是按横坐标的顺序给出的,所以我们可以先遍历然后求出某个点左边比它高和低的点的个数(这个过程简直和用树状数组求 ...
- AcWing 241. 楼兰图腾
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; typedef long long ll; ll ans,l ...
- String Reversal
Educational Codeforces Round 96 (Rated for Div. 2) - E. String Reversal 跳转链接 题目描述 定义一个操作为交换字符串中相邻的两个 ...
随机推荐
- wav音频文件头解析
wav概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(ResourceInterchange File Format)文件规范,用于保存Windows平台的音频信息 ...
- HDU1873 看病要排队 —— 优先队列(STL)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题解: 题目已经说出了解题方法:优先队列.但是之前没有学过优先队列,而且这题还是在现场赛做的.由 ...
- FFmpeg音视频编解码实践总结
PS:由于目前开发RTSP服务器传输模块时用到了h264文件,所以攻了一段时间去实现h264的视频编解码,借用FFmpeg SDK实现了任意文件格式之间的转换,并实现了流媒体实时播放,目前音视频同步需 ...
- DDD领域驱动之干货(二)
基于仓储的实现 1.前言:本着第一节写的有些糊涂,主要是自己喜欢实干,不太喜欢用文字表述,就这样吧.下面切入正题. 博客园里面有很多的大佬,我这里就不一一解释概览,有兴趣的朋友可以去看大佬们写的 ...
- CISCO-路由器交换机密码恢复
路由器密码恢复: 准备工作:一台PC跟一台路由器用console线相连 工作原理:如果忘记密码被锁在路由器外,通过修复寄存器值来进行修复 默认的寄存器值为0x2102(关闭的),若要恢复口令需要开启这 ...
- python 特殊方法之new
object.__new__(cls[, ...]) Called to create a new instance of class cls. __new__() is a static metho ...
- sipp 对asterisk 进行压力测试
测试环境 asterisk 192.168.106.170 版本astrisk1.8 sipp 192.168.106.141 sipp版本3.3 安装依赖包yum install make g ...
- Java笔记(五)
泛型:JDK1.5版本后出现的新特性.用于解决安全问题,是一个类型安全机制. 好处:将运行期间出现问题ClassCastException,转移到了编译时期.方便程序员解决问题,让运行时问题减少. 避 ...
- 深度学习之卷积神经网络(CNN)学习
1.卷积神经网络中卷积的核心意义是什么?每一组卷集核 权重是一个抽特征的滤波器, 从卷集核的角度抽取特征 2.卷积神经网络很好的特性参数共享机制每一个神经元固定一组a x b x c(图像的通道数) ...
- 用C++发邮件
近段时间,实验室电脑的IP频繁地改变,搞得想用远程偷下懒都不行.这时想到的解决方法有:静态IP,动态域名,自己解决.静态IP虽然可以自己指定,但一关机后,与对方冲突就完了,作罢.免费的动态域名又要手机 ...