写了一个支持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