zoukankan      html  css  js  c++  java
  • 【算法总结】基本算法

    【堆排序】

    〖模板代码

     1 #include<cstdio>
     2 #include<algorithm> 
     3 #include<cstring>
     4 #define LL long long
     5 using namespace std;
     6 const int N=1e5+10;
     7 int n,len,a[N];
     8 int read()
     9 {
    10     int x=0,f=1;char c=getchar();
    11     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    12     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    13     return x*f;
    14 }
    15 int main()
    16 {
    17     n=read();
    18     for(int i=1;i<=n;i++)
    19     {
    20         a[i]=read();len=i;
    21         while(len!=1)
    22         {
    23             if(a[len]<a[len/2])swap(a[len],a[len/2]);
    24             else break;len>>=1;
    25         }
    26     }
    27     for(int i=1;i<=n;i++)
    28     {
    29         printf("%d ",a[1]);
    30         a[1]=a[n-i+1];len=1;
    31         while(len*2<=n-i)
    32         {
    33             int next=len*2;
    34             if(a[next]>a[next+1]&&next<n-i)next++;
    35             if(a[len]<=a[next])break;
    36             swap(a[len],a[next]);len=next;
    37         }
    38     }
    39     return 0;
    40 }
    View Code

    【三分法】

    〖模板代码 

    1 int main()
    2 {
    3     while(r-l>1e-6)
    4     {
    5         mid1=l+(r-l)/3;mid2=r-(r-l)/3;
    6         if(calc(mid1)<calc(mid2))l=mid1;
    7         else r=mid2;
    8     }
    9 }
    View Code

    【ST表】

    〖模板代码〗 

     1 #include<cstdio>
     2 #include<algorithm> 
     3 #include<cstring>
     4 #include<cmath>
     5 #define LL long long
     6 using namespace std;
     7 const int N=1e5+5;
     8 int n,m,L,R,mx[N][20]; 
     9 int read()
    10 {
    11     int x=0,f=1;char c=getchar();
    12     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    13     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    14     return x*f;
    15 }
    16 int query(int L,int R)
    17 {
    18     int k=log(R-L+1)/log(2);
    19     return max(mx[L][k],mx[R-(1<<k)+1][k]);
    20 }
    21 int main()
    22 {
    23     n=read();m=read();
    24     for(int i=1;i<=n;i++)mx[i][0]=read();
    25     int k=log(n)/log(2);
    26     for(int i=1;i<=k;i++)
    27         for(int j=1;j<=n-(1<<(i-1));j++)
    28         {
    29             mx[j][i]=mx[j][i-1];
    30             mx[j][i]=max(mx[j][i],mx[j+(1<<(i-1))][i-1]);
    31         }
    32     while(m--)
    33     {
    34         L=read();R=read();
    35         printf("%d
    ",query(L,R));
    36     }
    37     return 0;
    38 }
    View Code

                                                                                                                                                                                                                                  

  • 相关阅读:
    [LOJ#6284.数列分块入门8] ODT(珂朵莉树)解法
    [CF Contest] Sum of Round Numbers 题解
    基础数论记录
    [CF Contest] Kana and Dragon Quest game 题解
    hexo上怎么写博客
    keepalived的部署
    python局部和全局变量
    python发送邮件
    lamp架构的部署
    rayns数据同步
  • 原文地址:https://www.cnblogs.com/zsnuo/p/7793456.html
Copyright © 2011-2022 走看看