国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NC54585 小魂和他的數(shù)列

這篇具有很好參考價(jià)值的文章主要介紹了NC54585 小魂和他的數(shù)列。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目鏈接

題目

題目描述

一天,小魂正和一個(gè)數(shù)列玩得不亦樂乎。
小魂的數(shù)列一共有n個(gè)元素,第i個(gè)數(shù)為Ai。
他發(fā)現(xiàn),這個(gè)數(shù)列的一些子序列中的元素是嚴(yán)格遞增的。
他想知道,這個(gè)數(shù)列一共有多少個(gè)長度為K的子序列是嚴(yán)格遞增的。

請你幫幫他,答案對998244353取模。

對于100%的數(shù)據(jù),1≤ n ≤ 500,000,2≤ K ≤ 10,1≤ Ai ≤ 109。

輸入描述

第一行包含兩個(gè)整數(shù)n,K,表示數(shù)列元素的個(gè)數(shù)和子序列的長度。
第二行包含n個(gè)整數(shù),表示小魂的數(shù)列。

輸出描述

一行一個(gè)整數(shù),表示長度為K的嚴(yán)格遞增子序列的個(gè)數(shù)對998244353取模的值。

示例1

輸入

5 3
2 3 3 5 1

輸出

2

說明

兩個(gè)子序列分別是 2 3 3 5 1 和 2 3 3 5 1 。

題解

知識點(diǎn):樹狀數(shù)組,枚舉,線性dp。

仿照最長上升子序列的狀態(tài),設(shè) \(f_{i,j}\) 為以第 \(i\) 個(gè)數(shù)結(jié)尾且長度為 \(j\) 的上升子序列個(gè)數(shù),顯然是 \(O(n^2k)\) 的。其中可以優(yōu)化的步驟是,查找上一個(gè)比自己小的元素。對于最長上升子序列優(yōu)化查找的步驟,通常有三種方法,我們依次考慮是否適合用于這道題的狀態(tài):

  1. 改變狀態(tài),設(shè) \(f_i\) 為長度為 \(i\) 的上升子序列的最小結(jié)尾數(shù)字,其有單調(diào)遞增的性質(zhì),因此每次新增數(shù)字,二分查找最后一個(gè)小于自己數(shù)字的位置即可。但是,這個(gè)顯然不適合用來優(yōu)化這道題的狀態(tài)。
  2. 優(yōu)化查找,用數(shù)據(jù)結(jié)構(gòu)維護(hù)前綴權(quán)值最大值,即以數(shù)字作為下標(biāo)維護(hù)每個(gè)數(shù)字結(jié)尾的最大長度。這個(gè)方法是可以考慮的,我們將維護(hù)最大長度改為各個(gè)長度的上升子序列個(gè)數(shù)即可。
  3. 排序+優(yōu)化查找,將數(shù)字順序改為從小到大輸入,用數(shù)據(jù)結(jié)構(gòu)維護(hù)前綴最大值,即在原本的區(qū)間上維護(hù)每個(gè)位置結(jié)尾的最大長度,輸入順序保證了每次詢問的答案一定都是比自己小的數(shù)字構(gòu)成的答案,都是可以接上的。這個(gè)方法同樣也是可以考慮的,我們將維護(hù)最大長度改為各個(gè)長度的上升子序列個(gè)數(shù)即可。

第二種方法需要先離散化,我們這里使用的是第三種方法,先排序后優(yōu)化查找,復(fù)雜度上是沒有區(qū)別的。

需要注意的是,使用第三種方法從小到大枚舉時(shí),因?yàn)橐蟮氖巧仙有蛄?,所以相等的?shù)字不能直接更新到數(shù)據(jù)結(jié)構(gòu)中,需要等到所有相等的數(shù)字都查詢完,才能一并更新。第二種方法由于直接維護(hù)權(quán)值關(guān)系,大小可以直接確定,則沒有這種情況。

時(shí)間復(fù)雜度 \(O(nk \log n)\)

空間復(fù)雜度 \(O(nk)\)文章來源地址http://www.zghlxwxcb.cn/news/detail-434571.html

代碼

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int P = 998244353;

template<class T>
class Fenwick {
    int n;
    vector<T> node;

public:
    Fenwick(int _n = 0) { init(_n); }

    void init(int _n) {
        n = _n;
        node.assign(n + 1, T());
    }

    void update(int x, T val) { for (int i = x;i <= n;i += i & -i) node[i] += val; }

    T query(int x) {
        T ans = T();
        for (int i = x;i;i -= i & -i) ans += node[i];
        return ans;
    }
};

int k;
struct T {
    array<int, 17> f = {};
    T &operator+=(const T &x) {
        for (int i = 1;i <= k;i++) (f[i] += x.f[i]) %= P;
        return *this;
    }
};

pair<int, int> a[500007];
int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n;
    cin >> n >> k;
    for (int i = 1;i <= n;i++) {
        int x;
        cin >> x;
        a[i] = { x,i };
    }
    sort(a + 1, a + n + 1, [&](auto a, auto b) {return a.first < b.first;});

    int ans = 0;
    Fenwick<T> fw(n);
    vector<pair<int, array<int, 17>>> v;
    for (int i = 1;i <= n;i++) {
        if (a[i].first != a[i - 1].first) {
            for (auto [id, f] : v) fw.update(id, { f });
            v.clear();
        }
        auto res = fw.query(a[i].second).f;
        for (int j = k;j >= 1;j--) res[j] = res[j - 1];
        res[1] = 1;
        (ans += res[k]) %= P;
        v.push_back({ a[i].second,res });
    }
    cout << ans << '\n';
    return 0;
}

到了這里,關(guān)于NC54585 小魂和他的數(shù)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 看看你的對象是啥種,他的生命歷程又是怎樣的呢?

    看看你的對象是啥種,他的生命歷程又是怎樣的呢?

    看到標(biāo)題滿腦大大的疑問 如上圖 是個(gè)什么鬼。今天我們就來介紹一下對象的類型用與區(qū)分你的對象。 基礎(chǔ)類型與數(shù)據(jù)類型 八種 基本數(shù)據(jù)類型 : int、short、float、double、long、boolean、byte、char。 對應(yīng)的 封裝類 是: Integer、Short、Float、Double、Long、Boolean、Byte、Character。 從作用

    2023年04月15日
    瀏覽(14)
  • 對 blur 平臺上面的任意地址,獲取他的出價(jià)信息(附代碼)

    對 blur 平臺上面的任意用戶地址,獲取他的出價(jià)信息 代碼是 Python 腳本,可用于采集用戶的出價(jià)信息。 腳本定義一個(gè) save_userinfo 函數(shù),該函數(shù)用于將用戶的出價(jià)信息寫入 CSV 文件。該函數(shù)接收兩個(gè)參數(shù):文件名和文本。它將文本寫入文件,并換行。 還定義了 headers 字典,該字

    2024年02月14日
    瀏覽(19)
  • 網(wǎng)絡(luò)安全先驅(qū)傳奇大佬自殺了,他的一生足夠拍成一部電影

    網(wǎng)絡(luò)安全先驅(qū)傳奇大佬自殺了,他的一生足夠拍成一部電影

    據(jù)西班牙報(bào)紙 El Pais 報(bào)道,網(wǎng)絡(luò)安全先驅(qū) John McAfee 在西班牙的監(jiān)獄中死亡,享年 75 歲。 McAfee 的律師稱,John McAfee 在九個(gè)月的監(jiān)禁中因絕望而自殺。目前監(jiān)獄當(dāng)局正在調(diào)查死因。 如果把 John McAfee 的一生拍成電影的話,估計(jì)連最牛逼的編劇都不敢這樣設(shè)計(jì)。 他販毒、酗酒、亂

    2024年02月11日
    瀏覽(18)
  • 前端如何利用js開啟攝像頭和關(guān)閉攝像頭以及他的指示燈

    其實(shí)本文章主要想要講解的就是如何關(guān)閉攝像頭以及他的指示燈,因?yàn)檫@個(gè)事真的很讓我苦惱,而開啟攝像頭其實(shí)并沒有那么難,只需調(diào)用navigator.mediaDevices.getUserMedia方法就行,具體就不細(xì)講了,直接上代碼(HTML結(jié)構(gòu)就是一個(gè)video標(biāo)簽和兩個(gè)button按鈕,所以就只上js部分了) 開啟

    2024年02月13日
    瀏覽(29)
  • 一篇文章帶你了解 什么是u(ustd)帶你了解他的前世今生

    一篇文章帶你了解 什么是u(ustd)帶你了解他的前世今生

    在數(shù)字貨幣的繁榮世界中,USDT無疑是其中一位重要的角色。它的前世今生,是一個(gè)從無到有,從小到大,經(jīng)歷了種種波折和爭議的故事。 2014年11月下旬,一個(gè)名為Realcoin的注冊地為馬恩島和香港的公司決定改變自己的名字,取名為Tether。這個(gè)決定預(yù)示著一種新的數(shù)字貨幣即將

    2024年01月23日
    瀏覽(23)
  • 數(shù)據(jù)分析師真實(shí)的工作是怎樣的?看完他的一天,才明白為什么別人比你掙得多

    如果你認(rèn)為數(shù)據(jù)分析師只能跑數(shù)據(jù),那可千錯(cuò)萬錯(cuò)了,數(shù)據(jù)分析師的真實(shí)工作究竟如何? 昨天就又雙叒被支付寶的賬單刷屏了。在這個(gè)大數(shù)據(jù)時(shí)代,通過數(shù)據(jù),不僅可以分析消費(fèi)行為,還可以分析一個(gè)人社交媒體及在互聯(lián)網(wǎng)中的社會影響力、知名度及社會地位,而且加上實(shí)名

    2024年02月08日
    瀏覽(25)
  • NC19469 01串

    題目鏈接 題目描述 I used to believe We were burning on the edge of something beautiful Something beautiful Selling a dream Smoke and mirrors keep us waiting on a miracle On a miracle Say go through the darkest of days Heaven\\\'s a heartbreak away Never let you go Never let me down OH it\\\'s been a hell of a ride Driving the edge of a knife Never let you

    2024年02月02日
    瀏覽(11)
  • NC200204 數(shù)位 DP

    題意 傳送門 NC200204 dh的帽子 題解 可以獨(dú)立考慮每一位是否合法。維護(hù)數(shù)字上下界的狀態(tài),枚舉三個(gè)數(shù)字,僅對合法的狀態(tài)進(jìn)行轉(zhuǎn)移。數(shù)位 DP 求解即可,時(shí)間復(fù)雜度 O ( l o g R ) O(logR) O ( l o g R ) 。

    2024年02月16日
    瀏覽(17)
  • ArcGIS處理nc數(shù)據(jù)步驟

    ArcGIS處理nc數(shù)據(jù)步驟

    使用ArcGIS讀取nc文件步驟: 1.打開ArcGIS,在多維工具下選擇“創(chuàng)建NetCDF柵格圖層” 2.輸入nc文件,其他參數(shù)可忽略,點(diǎn)擊確定 3.創(chuàng)建好后,右鍵點(diǎn)擊圖層,點(diǎn)擊屬性,選擇“NetCDF”,然后選擇波段緯度,接著點(diǎn)擊緯度對應(yīng)的值,這里維度值對應(yīng)的是時(shí)間,選擇任意一個(gè)時(shí)間。

    2024年02月15日
    瀏覽(27)
  • Linux命令之nc命令

    Linux命令之nc命令

    nc是netcat的簡寫,是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)工具,有著網(wǎng)絡(luò)界的瑞士軍刀美譽(yù)。nc命令在linux系統(tǒng)中實(shí)際命令是ncat,nc是軟連接到ncat。nc命令的主要作用如下: 實(shí)現(xiàn)任意TCP/UDP端口的偵聽,nc可以作為server以TCP或UDP方式偵聽指定端口 端口的掃描,nc可以作為client發(fā)起TCP或UDP連接 機(jī)

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包