• 士兵杀敌 三 --- O( 1 ) 的时间复杂度 .


    一看就是 十分简单的  题  ,   然后上去开始无脑程序   

    超时~~~      感觉时间复杂度 , 已经很低了  ,  但是并没有什么卵用 . 

     

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<vector>
     8 #include<set>
     9 #include<stack>
    10 #include<string>
    11 #include<sstream>
    12 #include<map>
    13 #include<cctype>
    14 #include<limits.h>
    15 using namespace std;
    16 int main()
    17 {
    18     int w,q,a[100000],n,m;
    19     scanf("%d%d",&w,&q);
    20     for(int i=1;i<=w;i++)
    21         scanf("%d",&a[i]);
    22     for(int i=0;i<q;i++)
    23     {
    24         int maxn=INT_MIN,minn=INT_MAX;
    25         scanf("%d%d",&n,&m);
    26         for(int j=n;j<=m;j++)
    27         {
    28             maxn=maxn>a[j]?maxn:a[j];
    29             minn=minn<a[j]?minn:a[j];
    30         }
    31         printf("%d
    ",maxn-minn);
    32     }
    33     return 0;
    34 }

    两个程序的时间复杂度

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<vector>
     8 #include<set>
     9 #include<stack>
    10 #include<string>
    11 #include<sstream>
    12 #include<map>
    13 #include<cctype>
    14 #include<limits.h>
    15 using namespace std;
    16 int dp_max[100005][17];
    17 int dp_min[100005][17];
    18 void RMQ(int n)
    19 {
    20     for(int j = 1; j < 17; j++)     //   这里 为啥 是 20 呢  ? //F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态) ???
    21     {
    22         for(int i = 1; i <= n; i++)     
    23         {
    24             if( i + (1<<j)-1 <= n)
    25             {
    26                 dp_max[i][j] = max(dp_max[i][j-1],dp_max[i+(1<<(j-1))][j -1]);
    27                 dp_min[i][j] = min(dp_min[i][j-1],dp_min[i+(1<<(j-1))][j-1]);
    28             }
    29         }
    30     }
    31 }
    32 int main()
    33 {
    34     int n,q,m,k;
    35     scanf("%d%d",&n,&q);            //   士兵的 总人数  .
    36     for(int i = 1; i <= n; i++)
    37     {
    38         scanf("%d",&dp_max[i][0]);      //  
    39         dp_min[i][0]=dp_max[i][0];    //    最小和最大 都先默认了  
    40     }
    41     RMQ(n);             //   一共 有  n  个 数字   
    42     while(q--)
    43     {
    44         scanf("%d%d",&m,&k);
    45         int s=(int)(log(k-m+1)/log(2));
    46         int max_val = max(dp_max[m][s],dp_max[k-(1<<s)+1][s]);
    47         int min_val = min(dp_min[m][s],dp_min[k-(1<<s)+1][s]);
    48         printf("%d
    ",max_val - min_val);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    ASP.NET动态加载用户控件的页面生成过程
    简单的flash与asp.net通信(LoadVars类)
    转 推荐两本FLASH RIA应用开发方面的书籍
    关于代码加密解密保护
    转 利用 SharpZipLib方便地压缩和解压缩文件
    在C#中应用哈希表(Hashtable)
    C#中解析并运行一个本地命令行
    About Windows Live Writer
    安装sql server 2008,提示要删除SQL Server 2005 Express 工具,可我根本没装
    [转] C#中的null
  • 原文地址:https://www.cnblogs.com/A-FM/p/5462787.html
Copyright © 2020-2023  润新知