• p1917


                关于二分的重要性

    这题,题意是没有看懂的(汉),但是看懂了图,那就搞吧。

    写了一个数组大小为50010的后发现大数据是会越界的。嗯嗯?这不是一个水题么?于是仔细阅读题目后发现:如果还想用数组记录下每个时刻的位置的音符的话是要开50000*50000的一维数组的,肯定是爆炸的。

    于是想到了前缀和,但是这样子时间复杂度又成了50000*50000,还是不行。

    于是询问了大神杨宇航,得知可以用二分a掉的。。。。这还真是简单易行的一种改进方法了,虽然不知道他说的是怎么个二分法,但我会套用我的前缀和就也行。

    忐忑的写了一份代码,竟然很快A掉了,就非常开心。

    结论:高人就是高人、以后要重视二分。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cmath>
     4 #include <string>
     5 #include <cstring>
     6 #include <algorithm>
     7 using namespace std;
     8 inline void write(int x)  
     9 {  
    10     if(x>9) write(x/10);  
    11     putchar(x%10+'0');  
    12 }
    13 inline int read()
    14 {
    15     int x=0;
    16     char ch=getchar();
    17     while(ch>'9'||ch<'0')
    18         ch=getchar();
    19     while(ch>='0'&&ch<='9')
    20     {
    21         x=(x<<1)+(x<<3)+ch-'0';
    22         ch=getchar();
    23     }
    24     return x;
    25 }
    26 int i,f,m,n,q,t;
    27 int sum[51000];
    28 int find(int x)
    29 {
    30     int zuo=1,you=n,mid=(zuo+you)/2;
    31     while(zuo+1<you)
    32     {
    33         if(t>sum[mid-1]&&t<=sum[mid])return mid;
    34         if(t<sum[mid])you=mid;
    35         if(t>sum[mid])zuo=mid;
    36         mid=(zuo+you)/2;
    37     }
    38     if(t>sum[zuo-1]&&t<=sum[zuo])return zuo;//决策还是我想了好久才弄出来的,果然太菜了
    39     else return you;
    40 }
    41 int main()
    42 {
    43 //freopen("123.in","r",stdin);
    44 //freopen("123.out","w",stdout);
    45     n=read();q=read();
    46     sum[1]=read()-1;
    47     for(i=2;i<=n;i++)
    48     {
    49         t=read();
    50         sum[i]=sum[i-1]+t;
    51         
    52     }
    53     for(i=1;i<=q;i++)
    54     {
    55         t=read();
    56         if(t==0)
    57         {
    58             putchar(int('1'));
    59             putchar(32);
    60             continue;
    61         }
    62 ////////////////////////////二分
    63         
    64         write(find(t));
    65         putchar(32);
    66         continue;
    67     }
    68 }
    O(∩_∩)O

          附上努力过程

     

  • 相关阅读:
    cron表达式
    mybatis中的#{}和${}
    mysql免安装版使用
    关于jpa添加一对多数据时外键值为空的问题
    关于时间格式化和格式转换
    属性和属性节点
    ErrorException: ORA-00904: : 标识符无效
    345. 反转字符串中的元音字母
    java 解决nginx代理的跨域访问问题
    633. 平方数之和
  • 原文地址:https://www.cnblogs.com/qywyt/p/9174889.html
Copyright © 2020-2023  润新知