当前位置: 首页 > wzjs >正文

网站上线 邮件群发模板荆州网站seo

网站上线 邮件群发模板,荆州网站seo,哪些网站做任务赚钱,泰州网站制作建设题目描述 Erwin 最近对一种叫 thair 的东西巨感兴趣。。。 在含有 n 个整数的序列 a1​,a2​,…,an​ 中&#xff0c;三个数被称作thair当且仅当 i<j<k 且 ai​<aj​<ak​。 求一个序列中 thair 的个数。 输入格式 开始一行一个正整数 n, 以后一行 n 个整数 …

题目描述

Erwin 最近对一种叫 thair 的东西巨感兴趣。。。

在含有 n 个整数的序列 a1​,a2​,…,an​ 中,三个数被称作thair当且仅当 i<j<k 且 ai​<aj​<ak​。

求一个序列中 thair 的个数。

输入格式

开始一行一个正整数 n,

以后一行 n 个整数 a1​,a2​,…,an​。

输出格式

一行一个整数表示 thair 的个数。

输入输出样例

输入 #1复制

4
2 1 3 4

输出 #1复制

2

输入 #2复制

5
1 2 2 3 4

输出 #2复制

7

说明/提示

样例2 解释

7 个 thair 分别是:

  • 1 2 3
  • 1 2 4
  • 1 2 3
  • 1 2 4
  • 1 3 4
  • 2 3 4
  • 2 3 4
数据规模与约定
  • 对于 30% 的数据 保证 n≤100;
  • 对于 60% 的数据 保证 n≤2000;
  • 对于 100% 的数据 保证 1≤n≤3×104,1≤ai​≤105。

代码实现:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 树状数组类
class FenwickTree {
private:
    vector<int> tree;
    int size;

public:
    FenwickTree(int n) : size(n), tree(n + 1, 0) {}

    void update(int idx) {
        while (idx <= size) {
            tree[idx]++;
            idx += idx & -idx;
        }
    }

    int query(int idx) {
        int sum = 0;
        while (idx > 0) {
            sum += tree[idx];
            idx -= idx & -idx;
        }
        return sum;
    }
};

int main() {
    int n;
    cin >> n;
    
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    
    // 离散化处理
    vector<int> b = a;
    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());
    
    // 计算left[j]:j之前小于a[j]的元素个数
    vector<int> left(n, 0);
    FenwickTree ft1(b.size());
    for (int j = 0; j < n; j++) {
        int idx = lower_bound(b.begin(), b.end(), a[j]) - b.begin() + 1;
        left[j] = ft1.query(idx - 1);
        ft1.update(idx);
    }
    
    // 计算right[j]:j之后大于a[j]的元素个数
    vector<int> right(n, 0);
    FenwickTree ft2(b.size());
    for (int j = n - 1; j >= 0; j--) {
        int idx = lower_bound(b.begin(), b.end(), a[j]) - b.begin() + 1;
        // j之后的元素总数是n-1-j个
        // ft2.query(idx)表示到当前为止(从右到左)小于等于a[j]的元素个数
        // 所以right[j] = (j之后的元素总数) - (小于等于a[j]的元素个数)
        right[j] = (n - 1 - j) - ft2.query(idx);
        ft2.update(idx);
    }
    
    // 计算所有thair的数量
    long long count = 0;
    for (int j = 0; j < n; j++) {
        count += (long long)left[j] * right[j];
    }
    
    cout << count << endl;
    
    return 0;
}

http://www.dtcms.com/wzjs/441796.html

相关文章:

  • 哪些网站可以做电脑画画赚钱优化关键词排名推广
  • 独立网站怎么做seo网页的基础知识
  • 餐饮营销策划方案范文seo站内优化技巧
  • 太原做网站公司哪家好友情链接有哪些展现形式
  • 网站建设结课总结洛阳seo网站
  • 济南网站建设求职营销推广平台
  • 微信公众号的微网站怎么做网络营销专业学什么课程
  • 网站建设杭州哪家便宜个人建站
  • 金融网站设计欣赏品牌公关案例
  • 做视频网站要准备哪些资料怎么制作网页里面的内容
  • 那些网站做推广足球比赛今日最新推荐
  • 网站数据库密码修改了要怎么做软文案例大全300字
  • 怎么做刷题网站搜索自媒体平台
  • 网站首页标题字数网络营销的基本特征有哪七个
  • 淘宝上做网站的靠谱吗百度竞价入门教程
  • 有漏洞的网站凡科网小程序
  • 做公司网站棋牌吸引人的软文
  • bootstrap风格网站模板全网营销
  • ecshop二次开发网站开发心得大连网站排名推广
  • 个人做网站模版是否有人买seo自动推广工具
  • 做网站产品资料表格开发一个app需要多少钱
  • 做网站的是什么工程师网页优化方法
  • 做网站日入100比百度好用的搜索软件
  • 大型网站建设历史网站维护的主要内容
  • 电商网站开发费用网络广告营销典型案例
  • 视频网站后台功能济南网站优化
  • 网站免费源码下载百度云下载
  • 转运网站建设网站检测工具
  • 黄岩做网站营销方案的几个要素
  • 苏州住建网站网站功能优化的方法