hoj 2275 Number sequence

hoj 2275 Number sequence

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Number sequence

Given a number sequence which has N element(s), please calculate the number of different collocation for three number Ai, Aj, Ak, which satisfy that Ai < Aj > Ak and i < j < k.


Input


The first line is an integer N (N <= 50000). The second line contains N integer(s): A1, A2, …, An(0 <= Ai <= 32768).


Output

There is only one number, which is the the number of different collocation.

Sample Input


5
1 2 3 4 1


Sample Output


6

题目就是统计序列中Ai < Aj > Ak(i < j < k)的个数。能够从前往后统计每一个元素之前小于它的数的个数,在从后往前统计每一个元素之后小于它的数的个数。然后乘积加和就可以。用树状数组轻松搞定!


AC代码例如以下:


#include<iostream>
#include<cstdio>
#include<cstring>
#define M 50010
using namespace std;

int c[M],num[M];
int l[M],n;

int lowbit(int a)
{
    return a&-a;
}

void add(int a,int b)
{
    while (a<M)
    {
        c[a]+=b;
        a+=lowbit (a);
    }
}

int sum(int a)
{
    int ans=0;
    while(a>0)
    {
        ans+=c[a];
        a-=lowbit(a);
    }
    return ans;
}

int main ()
{
    int i,j;
    int a,b;
    while(~scanf("%d",&n))
    {
        memset(c,0,sizeof c);
        memset(num,0,sizeof num);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            l[i]=sum(num[i]-1);
            add(num[i],1);
        }
        memset(c,0,sizeof c);
        long long ans=0;
        for(i=n;i>=1;i--)
        {
            ans=ans+(long long)sum(num[i]-1)*l[i];
            add(num[i],1);
        }
        printf("%lld\n",ans);
    }
    return 0;
}



版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117267.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月8日 下午1:00
下一篇 2022年1月8日 下午1:00


相关推荐

  • 批处理 注释_批处理文件注释语句

    批处理 注释_批处理文件注释语句rem为注释命令,用来给程序加上注释,该命令后的内容不被执行,但是能够回显。::也可以起到和rem一样的注释效果,但是有两点需要注意:1.任何以:开头的字符行,在批处理中都被视作标号,而直接忽略其后所有的内容。一个有效的标号在冒号后紧跟一个以字母或数字开头的字符串,它能够被goto命令所识别。如果冒号后面跟的是非数字字母的特殊符号,则被视为无效标号,goto命令无法识别这类标号,从而起到注…

    2025年8月8日
    5
  • J1939 多包报文传输

    J1939 多包报文传输以J1939RC(RetarderConfigration)报文为例,19个字节,需要分3条报文发送。1、将要发送多包报文之前先会广播一条ID为0x18ECFF**形式的一条报文TPCM(以目前理解最后**为源地址,RC报文的话为0F),数据场会提示接下来将会发送多少条报文,包含什么信息(RC)。2、随后以一条ID为0x18EB00**形式TPDT发送3条报文,传输数据多于8字节的报文…

    2022年5月9日
    73
  • 什么是单例模式?单例模式有什么作用?为什么要用单例模式

    什么是单例模式?单例模式有什么作用?为什么要用单例模式单例模式单例模式 SingletonPat 是 Java 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只有单个对象被创建 这个类提供了一种访问其唯一的对象的方式 可以直接访问 不需要实例化该类的对象 注意 1 单例类只能有一个实例 2 单例类必须自己创建自己的唯一

    2026年3月17日
    2
  • Hashcode的作用_hashcode实现

    Hashcode的作用_hashcode实现根据API文档,java中的hashcode事实上是跟equals是有着密切联系的,hashcode是为了提高哈希表的性能下面的话来自JDK:hashCodepublicinthashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。publicnativeinthashCode();说明是一个本地方法,它的…

    2025年10月1日
    7
  • [转]组合数取模【转自AekdyCoin的组合数取模】

    [转]组合数取模【转自AekdyCoin的组合数取模】转载自大牛的百度空间:http://hi.baidu.com/aekdycoin/item/e051d6616ce60294c5d249d7大家都在中学阶段学习了组合数的定义:这个表示的是从n个元素中选取m个元素的方案数。(PS.组合数求模似乎只用在信息学竞赛和ACM竞赛等计算机编程设计大赛中……,求在现实中的运用)可以知道当n,m取得比较大的时候,组合数可能很大很大(天文数字?无…

    2022年7月23日
    10
  • Louvain算法_算法问题

    Louvain算法_算法问题Louvain算法一种基于模块度的图算法模型,与普通的基于模块度和模块度增益不同的是,该算法速度很快,而且对一些点多边少的图,进行聚类效果特别明显。算法流程:1、初始时将每个顶点当作一个社区,社区个数与顶点个数相同。2、依次将每个顶点与之相邻顶点合并在一起,计算它们的模块度增益是否大于0,如果大于0,就将该结点放入该相邻结点所在社区。3、迭代第二步,直至算法稳定,即所有顶点所属社区不再变…

    2025年7月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号