板子

板子
//开区间最大不相交问题<=
//闭区间最小选点数问题<
struct node{
     int L,R;}A[maxn];
struct Rul{
     //类金字塔
    bool operator () (const node& A,const node& B) const{
     
        if(A.L==B.L)return A.R<B.R;
        else return A.L>B.L;
    }
};
void section(){
     
    int n;cin>>n;
    for(int i=0;i<n;i++)cin>>A[i].L>>A[i].R;
    sort(A,A+n,Rul());
    int aim=A[0].L,cnt=1;
    for(int i=1;i<n;i++)
        if(A[i].R<=aim){
     //A[i].R
            aim=A[i].L;
            ++cnt;
        }
    cout<<cnt<<endl;
}
//整数二分
bool check(int M){
     }
int bs_L(int L,int R){
     //L<-mid(有解)
    while(L<R){
     
        int mid=(L+R+1)/2;
        if(check(mid))L=mid;
        else R=mid-1;
    }
    return L;
}
int bs_R(int L,int R){
     //mid->R(有解)
    while(L<R){
     
        int mid=(L+R)/2;
        if(check(mid))R=mid;
        else L=mid+1;
    }
    return R;
}
//浮点数二分
const double eps=1e-5;
double F(x){
     return ```;}//↑>0 ↓<0
double bs_F(double L,double R){
     
	double mid;
    while(R-L>eps){
     
        mid=(L+R)/2;
        if(F(mid)>0)R=mid;//F(mid)<0
        else L=mid;
    }
    return mid;
}
//生成组合数
#include
#include
using namespace std;
const int maxn=21;
int A[maxn];
bool vis[maxn];
int main(){
     
    int n,m;cin>>n>>m;
    for(int i=0;i<n;i++)cin>>A[i]; 
    for(int i=m;i<n;i++)vis[i]=true;
    do{
     
        for(int i=0;i<n;i++)if(!vis[i])cout<<A[i]<<' ';
        cout<<'\n';
    }while(next_permutation(vis,vis+n));
    return 0;
}
//素数打表
const int maxn=1e5;
bool prime[maxn+1]={
     1,1};
void find_prime(){
     
    int m=sqrt(maxn+0.5);
    for(int i=2;i<=m;i++)
        if(!prime[i])
            for(int j=i*i;j<=maxn;j+=i)
                prime[j]=1;
}
//二进制子集生成
#include
int main(){
     
    int n;scanf("%d",&n);
    for(int i=0;i<(1<<n);i++){
     
        for(int j=0;j<n;j++)if(i&(1<<j))printf("%d ",j);
        printf("\n");
    }
    return 0;
}
//最大连续子序列和MCSS
//dp[i]为以A[i]为结尾的MCSS
//dp[i]=max(A[i],dp[i-1]+A[i])
dp[0]=A[0];//edge
for(int i=1;i<n;i++)dp[i]=max(A[i],dp[i-1]+A[i]);
cout<<Max(dp[i])<<endl;
//最长不下降子序列LIS
//dp[i]为以A[i]为结尾的LIS
//dp[i]=max(1,dp[j]+1)j∈[0,i)&&A[j]<=A[i]
for(int i=0;i<n;i++)dp[i]=1;//edge
for(int i=0;i<n;i++)
    for(int j=0;j<i;j++){
     
        if(A[j]>A[i])continue;
        dp[i]=max(1,dp[j]+1);
    }
cout<<Max(dp[i])<<endl;
//最长公共子序列LCS
//dp[i][j]为以stra[i]与strb[j]为结尾的LCS
//dp[i][j]=dp[i-1][j-1]+1;stra[i]==strb[j];
//dp[i][j]=max(dp[i-1][j],dp[i][j-1]);stra[i]!=strb[j];
stra='0'+stra,strb='0'+strb;//Pretreatment
for(int i=0;i<=lena;i++)dp[i][0]=0;//edge
for(int j=0;j<=lenb;j++)dp[0][j]=0;//edge
for(int i=1;i<=lena;i++)
    for(int j=1;j<=lenb;j++)
        if(stra[i]==strb[j])dp[i][j]=dp[i-1][j-1]+1;
        else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
cout<<dp[lena][lenb]<<endl;
//扩欧(a*x+b*y==c)
//当c%gcd(a,b)==0时有解
int a,b,d,x,y;
void exgcd(int a,int b,int& d,int& x,int& y){
     
    if(b==0){
     d=a;x=1;y=0;}
    else{
     exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}
x=x*c/gcd(a,b),y=y*c/gcd(a,b);
//x的最小非负整数解
int minx=(x%(b/gcd(a,b))+b/gcd(a,b))%(b/gcd(a,b))
int xk=x+k*b/gcd(a,b);//k∈Z
int yk=y-k*a/gcd(a,b);//k∈Z
//同余式a*x≡c(mod m)转扩欧a*x+m*y=c
//当c%gcd(a,m)==0时有解
ll a,m,d,x,y;
void exgcd(ll a,ll m,ll& d,ll& x,ll& y){
     
    if(m==0){
     d=a;x=1;y=0;}
    else{
     exgcd(m,a%m,d,y,x);y-=x*(a/m);}
}
x=x*c/gcd(a,m);
//x的最小非负整数解
ll minx=(x%(m/gcd(a,m))+m/gcd(a,m))%(m/gcd(a,m))
ll xk=x+k*m/gcd(a,m);//k∈[0,gcd(a,m)-1]
//组合数的计算
ull C(ull n,ull m){
     
    ull ans=1;
    if(m>n-m)m=n-m;
    for(ll i=1;i<=m;++i)ans=ans*(n-m+i)/i;
    return ans;
}
//组合数的递归计算(n<67,m<33)
ull res[67][67]={
     0};
ull C(ull n,ull m){
     
    if(m==0||m==n)return 1;
    if(res[n][m]!=0)return res[n][m];
    return res[n][m]=C(n-1,m)+C(n-1,m-1);
}
//组合数的模运算C(n,m)%mod(m<=n<=1e3)
const int maxn=1e3;
int res[maxn+1][maxn+1];
int C(int n,int m,int p){
     
    if(m==0||m==n)return 1;
    if(res[n][m]!=0)return res[n][m];
    return res[n][m]=(C(n-1,m)+C(n-1,m-1))%mod;
}
//进制转换(62以内)
//注意:与传统不同的是此转换对应规则为A=10,a=36
string atob(string str,int a,int b){
     
    string res;
    vector<int> A,B;
    for(unsigned int i=0;i<str.size();i++){
     
        if('0'<=str[i]&&str[i]<='9')A.push_back(str[i]-'0');
        if('A'<=str[i]&&str[i]<='Z')A.push_back(str[i]-'A'+10);
        if('a'<=str[i]&&str[i]<='z')A.push_back(str[i]-'a'+36);
    }
    reverse(A.begin(),A.end());
    while(!A.empty()){
     
        int rem=0;
        for(int i=A.size()-1;i>=0;i--){
     
            A[i]+=rem*a;
            rem=A[i]%b;
            A[i]=A[i]/b;
        }
        B.push_back(rem);
        while(!A.empty()&&A.back()==0)A.pop_back();
    }
    reverse(B.begin(),B.end());
    for(unsigned int i=0;i<B.size();i++){
     
        if(B[i]<=9)res+=B[i]+'0';
        if(10<=B[i]&&B[i]<=35)res+=B[i]-10+'A';
        if(36<=B[i]&&B[i]<=62)res+=B[i]-36+'a'; 
    }
    return res;
}
//质因子分解
#include
#include
#include
using namespace std;
const int maxn=1e5;
vector<int> prime;
bool is_prime(int n){
     
    int m=floor(sqrt(1.0*n)+0.5);
    for(int i=2;i<=m;i++)if(n%i==0)return false;
    return true;
}
void find_prime(){
     
    for(int i=2;i<maxn;i++)
        if(is_prime(i))
            prime.push_back(i);
}
struct node{
     int x,cnt;}fac[10];
int main(){
     
    find_prime();
    int n;scanf("%d",&n);
    int sqr=sqrt(1.0*n),aim=0;
    for(unsigned int i=0;i<prime.size()&&prime[i]<=sqr;i++){
     
        if(n%prime[i]==0){
     
            fac[aim].x=prime[i];
            fac[aim].cnt=0;
            while(n%prime[i]==0){
     
            	++fac[aim].cnt;
            	n/=prime[i];
            }
            ++aim;
        }
        if(n==1)break;
    }
    if(n!=1){
     
        fac[aim].x=n;
        fac[aim++].cnt=1;
    }
    for(int i=0;i<aim;i++)printf("%d^%d\n",fac[i].x,fac[i].cnt);
    return 0;
}

你可能感兴趣的:(板子)