首页 > 其他分享 >acwing 297 赤壁之战

acwing 297 赤壁之战

时间:2023-03-04 12:35:15浏览次数:32  
标签:bin tes const int len 赤壁之战 297 include acwing

给定一个长度为n 的序列 , 求 它有多少个长度为 m的严格递增子序列。

 

 f[i][j] += f[i-1][k] (a[k]<a[i], k<i )

 

 优化 : 维护前缀和,根据a[k]<a[i]  ,以a[ ] 为下标维护树状数组 , add(a[i] ,f[i-1][j] )

 

 

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std ;
 const int N =1e3+4;
 const int mod =1e9+7;
 #define int long long
int n,m,a[N],f[N][N];
int tr[N];
int bin[N],len;

int lowbit(int x){
	return x&-x;
}
void add(int x, int v){
    for(; x <= len; x += lowbit(x))
        tr[x] = (tr[x]+v),tr[x]%=mod;
}
int qry(int x){
	int  t=0;
	for(;x;x-=lowbit(x)) t+=tr[x],t%=mod;
	return t;
}
void solve(int cas){
		int i,j;
		for(j=2; j<=m;j++) {
            for(i=1;i<=len;i++) tr[i] = 0;
            for(i=1;i<=n;i++){
                f[i][j] =qry(a[i] - 1);
                add(a[i], f[i][j-1]);
            }
        }
        int ans=0;
    for(int i=1;i<=n;i++) ans+=f[i][m],ans%=mod;
   printf("Case #%d: %lld\n",cas,ans);
}

signed main(){
	int tes,cas=0;
	cin>>tes;
	while(tes--){
		len=0;
        cin>>n>>m;
        for(int i = 1; i <= n; i++){
           cin>>a[i];
            bin[i] = a[i];
            f[i][1]=1;
        }
        sort(bin+1, bin+1+n);
    	len = unique(bin+1, bin+1+n)-(bin+1);
        for(int i = 1; i <= n; i++) 
        a[i] = lower_bound(bin+1, bin+1+len, a[i]) -bin;
        
		solve(++cas);
   }	
}

 

标签:bin,tes,const,int,len,赤壁之战,297,include,acwing
From: https://www.cnblogs.com/towboa/p/17178061.html

相关文章

  • acwing 330. 估算
    给定一个长度为n的整数数组A,你需要创建另一个长度n的整数数组B,数组B被分为K个连续的部分,并且如果X和y在同一个部分,则B[i]=B[j]b[x]=b[y]如果要求数组B满足su......
  • AcWing 1562. 微博转发
    微博被称为中文版的Twitter。微博上的用户既可能有很多关注者,也可能关注很多其他用户。因此,形成了一种基于这些关注关系的社交网络。当用户在微博上发布帖子时,他/她的......
  • 2023.3.1AcWing蓝桥杯集训·每日一题
    今日的知识点为\(BFS\)(广度优先搜素)。\(BFS\)简要介绍下\(BFS\)算法。首先,\(BFS\)算法适用于边权为\(1\)的图论问题。\(BFS\)算法的解题思路也比较固定。确定......
  • 2023.2.27AcWing蓝桥杯集训·每日一题
    复习的知识点为哈希。AcWing840.模拟散列表题目描述维护一个集合,支持如下几种操作:Ix,插入一个数\(x\);Qx,询问数\(x\)是否在集合中出现过;现在要进行\(N\)次操......
  • 2023.2.28AcWing蓝桥杯集训·每日一题
    今日复习的知识点为Tire树(字典树)。字典树可用于快速存储和查找字符串,并且\(0-1\)字典树也可以用于解决异或问题。AcWing3485.最大异或和题目描述给定一个非负整数数......
  • AcWing 1249. 亲戚
    或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的......
  • AcWing 2058. 笨拙的手指
    1.题目描述每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字14转换为二进制数,那么正确的结果应为1110,但她可能会写下01......
  • Acwing 1238. 日志统计(双指针)
    https://www.acwing.com/problem/content/1240/1238.日志统计输入样例:71020101010101019110031003输出样例:13首先注意数据范围,0-1e5的数据范围......
  • acwing 281 硬币
    给定n种硬币,其中第i种硬币的面值为Ai,共有piCi个。从中选出若干个硬币,把面值相加,若结果为sS,则称“面值sS能被拼成”。求1∼M1~M之间能被拼成的面值有多少个。#i......
  • acwing 287积蓄程度
      除了源点之外,树中所有度数为1的节点都是入海口,可以吸收无限多的水,我们称之为汇点。也就是说,水系中的水从源点出发,沿着每条河道,最终流向各个汇点。问最大流量  ......