最長上升子序列

最長上升子序列(Longest Increasing Subsequence)

int len[__];

int LIS(int a[],int n)
{
    int lis=0;
    for(int i=1;i<=n;++i)
    {
        int x=lower_bound(len+1,len+lis+1,a[i])-len;
        len[x]=a[i],lis=max(x,lis);
    }
    return lis;
}

最長上升子序列方案數

struct node
{
    int x,p,ans;

    bool operator<(const node &b)const
    {
        if(x!=b.x)return x<b.x;
        return p<b.p;
    }
}dp[__];

int n,a[__],b[__],len[__];

/*
樹狀數組:
單點修改void add(int x,int val)
查詢前綴和int sum(int x)
*/

int main()
{
    sf("%d",&n);
    for(int i=1;i<=n;++i)
        sf("%d",&a[i]),b[i]=a[i];

  //離散化數組a[]
    sort(b+1,b+1+n);
    int m=unique(b+1,b+1+n)-b-1;
    fup(i,1,n)a[i]=lower_bound(b+1,b+1+m,a[i])-b;

  //求最長上升子序列及其每個數的深度
    int lis=0;
    for(int i=1;i<=n;++i)
    {
        int x=lower_bound(len+1,len+lis+1,a[i])-len;
        len[x]=a[i];
        dp[i]={x,i,1};
        lis=max(x,lis);
    }

    sort(dp+1,dp+n+1);
  //x->第i層, y->第i+1層
    int x=1,y=0,ans=0;

  //初始化第一層, 使y指向第二層
    while(++y<=n && dp[y].x==1)
        if(lis==1)++ans;

    for(int i=1;i<lis;++i)
    {
        int z=y;
      //雙指針
        for(;y<=n && dp[y].x==i+1;++y)
        {
            for(;x<=n && dp[x].x==i && dp[x].p<dp[y].p;++x)
                T.add(a[dp[x].p],dp[x].ans);
            dp[y].ans=1ll*dp[y].ans*T.sum(a[dp[y].p]-1)%mod;
            if(i+1==lis && (ans+=dp[y].ans)>=mod)
                ans-=mod;
        }
      //清空樹狀數組
        for(--x;dp[x].x==i;--x)
            T.clear(a[dp[x].p]);
        x=z;
    }
    printf("%d\n",ans);
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末澈侠,一起剝皮案震驚了整個濱河市侠驯,隨后出現的幾起案子咖城,更是在濱河造成了極大的恐慌,老刑警劉巖陵究,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異裳擎,居然都是意外死亡环壤,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門诉濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來周伦,“玉大人,你說我怎么就攤上這事未荒∽ㄅ玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵片排,是天一觀的道長寨腔。 經常有香客問我,道長划纽,這世上最難降的妖魔是什么脆侮? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮勇劣,結果婚禮上,老公的妹妹穿的比我還像新娘潭枣。我一直安慰自己比默,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布盆犁。 她就那樣靜靜地躺著命咐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谐岁。 梳的紋絲不亂的頭發(fā)上醋奠,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天榛臼,我揣著相機與錄音,去河邊找鬼窜司。 笑死沛善,一個胖子當著我的面吹牛,可吹牛的內容都是我干的塞祈。 我是一名探鬼主播金刁,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼议薪!你這毒婦竟也來了尤蛮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斯议,失蹤者是張志新(化名)和其女友劉穎产捞,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體哼御,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡坯临,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了艇搀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尿扯。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焰雕,靈堂內的尸體忽然破棺而出衷笋,到底是詐尸還是另有隱情,我是刑警寧澤矩屁,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布辟宗,位于F島的核電站,受9級特大地震影響吝秕,放射性物質發(fā)生泄漏泊脐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一烁峭、第九天 我趴在偏房一處隱蔽的房頂上張望容客。 院中可真熱鬧,春花似錦约郁、人聲如沸缩挑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽供置。三九已至,卻和暖如春绽快,著一層夾襖步出監(jiān)牢的瞬間芥丧,已是汗流浹背紧阔。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留续担,地道東北人擅耽。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像赤拒,于是被迫代替她去往敵國和親秫筏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355