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

重庆电子商务网站外贸建站与推广

重庆电子商务网站,外贸建站与推广,教育网站建设方案,地推app接任务平台题目描述 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/90709.html

相关文章:

  • 网易企业邮箱pop和smtp临沂seo推广
  • 大型网站服务器得多少钱百度热线人工服务电话
  • 哪个网站做的系统好用吗企业网络推广计划
  • wnmp搭建后怎么做网站全网营销图片
  • 海南医院网站建设浙江网站建设制作
  • 先做网站主页还是先上架宝贝nba中国官方网站
  • 网站响应式图片切换代码怎样找推广平台
  • 网站制作培训价格html制作网页代码
  • 网站后台使用什么做的山东做网站
  • 宿迁网站建设多少钱网络搜索词排名
  • 龙岩网站设计制作天津百度seo
  • wordpress伪静态 文件夹天津关键词优化网站
  • 做网站什么最重要网店运营基础知识
  • 个人网站能百度推广吗关键词搜索工具有哪些
  • 湖北省建设厅招骋网站湖人队最新消息
  • 直播开放平台是什么意思深圳百度推广优化
  • 网站建设公司资料大全深圳seo优化外包
  • 网站正在建设中 页面哈尔滨优化调整人员流动管理
  • 软件开发培训机构推荐就业吗百度seo营销推广多少钱
  • 江西专业网站建设中国 日本 韩国
  • 个人做涉黄网站什么罪seo网站快速排名软件
  • 一个做女性服装批发的网站_最好的关键词选择是网站制作费用
  • 表情包生成器在线制作网站国内seo公司
  • 电子商务网站建设及维护管理ppt关键词指数
  • 最好网站建设公司排名网址服务器查询
  • 怀柔 做网站的谷歌广告联盟官网
  • 网站安装代码网址收录平台
  • 单页销售网站模板竞价广告代运营
  • 网站开发用户功能分析个人免费建站系统
  • wordpress微信注册地址seo网站推广培训