Why CE?
  • 板块学术版
  • 楼主盐焗蛋
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/23 15:44
  • 上次更新2024/2/23 15:59:07
查看原帖
Why CE?
709361
盐焗蛋楼主2024/2/23 15:44

写了一个支持stable的类:

#include <bits/stdc++.h>
using namespace std;
template <typename Tp,Tp resnum>
class My_stable{
	private:
		vector <vector<Tp> > dp;
		vector <int> lg;
	public:
		My_stable(){}
		void reset(int n,Tp a[]){
			lg.resize(n+5);
			for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
			dp.resize(lg[n]+3);
			for(int i=0;i<dp.size();i++) dp[i].resize(n+5);
			for(int i=0;i<dp.size();i++)
				for(int j=0;j<dp[i].size();j++)
					dp[i][j]=resnum;
			if(resnum<0){
				for(int i=1;i<=n;i++) dp[0][i]=a[i];
				for(int j=1;j<=lg[n];j++)
					for(int i=1;i<=n-(1<<j)+1;i++)
						dp[j][i]=max(dp[j-1][i],dp[j-1][i+(1<<j-1)]);
			}
			else{
				for(int i=1;i<=n;i++) dp[0][i]=a[i];
				for(int j=1;j<=lg[n];j++)
					for(int i=1;i<=n-(1<<j)+1;i++)
						dp[j][i]=min(dp[j-1][i],dp[j-1][i+(1<<j-1)]);
			}
		}
		Tp query(int l,int r){
			int k=lg[r-l+1];
			if(resnum<0) return max(dp[k][l],dp[k][r-(1<<k)+1]);
			else return min(dp[k][l],dp[k][r-(1<<k)+1]);
		}
};
My_stable <int,-114514> st;
int main(){
	
}

这样运行正常,但是把My_stable <int,-114514> st; 换成My_stable <double,-114514.0> st;就寄了。

[Error] 'double' is not a valid type for a template non-type parameter [Error] invalid type in declaration before ';' token

2024/2/23 15:44
加载中...