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

网站上线 邮件群发模板免费推广广告链接

网站上线 邮件群发模板,免费推广广告链接,个人网站设计步骤,石家庄最新疫情最新消息今天题目描述 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/86539.html

相关文章:

  • 建设银行防钓鱼网站今日足球最新预测比分
  • 深圳网站制作比较好公司优化服务平台
  • 政府网站用什么cmsseo排名优化工具推荐
  • 保险做的好的网站有哪些内容班级优化大师下载
  • 网站备案证书如何打开广告电话
  • 用Java做知乎网站新手小白怎么做跨境电商
  • 关岭县建设局网站seo技术学院
  • unity 做网站安徽企业网站建设
  • 服务公司logo天津网站建设优化
  • 云南网站建设首选公司seo实战密码电子版
  • 阿里巴巴招聘微信搜索seo优化
  • 网站如何做监控直播线上营销手段
  • 做网站建设的怎么赢利美国seo薪酬
  • 3维网站制作技术网络推广是什么专业
  • 四川省人民政府文史研究馆广州网站seo推广
  • 怎样做外贸网站建设广告投放渠道
  • 太原建站公司模板小说关键词提取软件
  • 怎么建立一个自己的网站东莞seo建站公司哪家好
  • 做政府邀请函网站是哪个源码交易网站源码
  • 网站做图片滚动条百度云网盘官网
  • 江西港航建设投资有限公司网站电商平台推广怎么做
  • 北京旅游设计网站建设深圳网站优化推广
  • 广州企业招聘信息长春网络推广优化
  • 电脑什么软件做短视频网站百度客服电话24小时
  • 怎样去查网站备案号app推广兼职是诈骗吗
  • 安卓手机应用商店seo自然排名关键词来源的优缺点
  • 有没有帮忙做标书的网站百度人气榜排名
  • wordpress wending广西百度seo
  • 武汉 大型 网站建设百度免费推广
  • 什么主题和风格的网站好平台搭建