zoukankan      html  css  js  c++  java
  • cdoj1344卿学姐种美丽的花

    地址:http://acm.uestc.edu.cn/#/problem/show/1344

    题目:

    卿学姐种美丽的花

    Time Limit: 8000/4000MS (Java/Others)     Memory Limit: 125535/65535KB (Java/Others)
     

    众所周知,在喵哈哈村,有一个温柔善良的卿学姐。

    卿学姐喜欢和她一样美丽的花。所以卿学姐家的后院有很多的花坛。

    卿学姐有nn个花坛,一开始第ii个花坛里有A[i]A[i]朵花。每过一段时间,卿学姐都会在花坛里种上新的花。

    作为一个聪明的学姐,卿学姐的种花方式也是与众不同 , 每一次,卿学姐会在第xx个花坛种上yy朵花,然后在第x+1x+1个花坛上种上y1y−1朵花,再在第x+2x+2个花坛上种上y2y−2朵花......以此类推,直到种到最后一个花坛,或者不需要种花为止。

    喵哈哈的村民们都喜欢去卿学姐的后院赏花,沈宝宝也不例外。然而沈宝宝可不是省油的灯,怎么可能会老老实实地赏花呢。每次沈宝宝来时,都会随机询问卿学姐在第ii个花坛有多少朵花。

    花坛的花实在太多了,卿学姐实在是数不过来。于是现在她向你求助,希望你能帮她数出花坛里多少朵花。

    Input

    第一行输入两个整数,花坛个数NN和操作次数QQ。

    第二行NN个整数A[1],A[2],A[3].....A[N]A[1],A[2],A[3].....A[N]。 ( 1A[i]2311≤A[i]≤231 )

    接下来QQ行,每行一个操作。

    1. 1 x y 表示卿学姐会在xx号花坛种yy朵花,并按相应的规律在后面的花坛上种花。

    2. 2 x 表示沈宝宝问卿学姐第xx个花坛有多少朵花。

    数据保证:

    • 1N1061≤N≤106

    • 1Q21061≤Q≤2∗106

    • 对于操作 11 , 1xN1≤x≤N,1y1091≤y≤109

    • 对于操作 22 , 1xN1≤x≤N

    Output

    对于每个询问操作,按顺序输出答案对772002+233772002+233取模的值。

    Sample input and output

    Sample InputSample Output
    6 3
    1 2 3 2 1 2
    1 2 3
    2 3
    2 6
    5
    2
    

    思路:

    这题之前做过,,所以一看到就去卿学姐的代码搞一发(因为我发现之前提交的代码看不到了,所以就用的卿学姐的)

    后来听说会查重,就只好重写了。。

    思路:用线段树处理,每个节点记录要加的值,并记录加的次数,然后查询的时候加上原来的数值就好了,不过这题会爆int,重写的时候居然又错了一次,,,,,惨

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cmath>
     5 #include <cstring>
     6 #include <queue>
     7 #include <stack>
     8 #include <map>
     9 #include <set>
    10 #include <vector>
    11 #include <cstdlib>
    12 #include <string>
    13 #include <bitset>
    14 
    15 #define PI acos((double)-1)
    16 #define E exp(double(1))
    17 #define K 1000000
    18 using namespace std;
    19 
    20 struct node
    21 {
    22     int left,right;
    23     long long cnt,x;
    24 
    25 };
    26 struct node tree[4*K+9];
    27 int a[K+9];
    28 void build(int id,int l,int r)
    29 {
    30     tree[id].left=l;tree[id].right=r;
    31     if(l==r)
    32     {
    33         tree[id].x=tree[id].cnt=0;
    34     }
    35     else
    36     {
    37         build(2*id,l,(l+r)/2);
    38         build(2*id+1,(l+r)/2+1,r);
    39     }
    40 }
    41 void update(int id,int l,int r,int v)
    42 {
    43     if(tree[id].left ==l &&  tree[id].right==r)
    44     {
    45         tree[id].x+=v;tree[id].cnt++;
    46     }
    47     else
    48     {
    49         int mid=(tree[id].left+tree[id].right)/2;
    50         if (r<=mid) update(id*2,l,r,v);
    51         else if(l>mid)  update(id*2+1,l,r,v);
    52         else update(id*2,l,mid,v),update(id*2+1,mid+1,r,v-(mid+1-l));
    53     }
    54 }
    55 
    56 long long query(int id,int x)
    57 {
    58     if(tree[id].left==tree[id].right)
    59         return tree[id].x;
    60     long long sum=0;
    61     sum+=tree[id].x-(x-tree[id].left)*tree[id].cnt;
    62     int mid=(tree[id].left+tree[id].right)/2;
    63     if (x<=mid)  return sum+query(id*2,x);
    64     else  return sum+query(id*2+1,x);
    65 }
    66 
    67 int main(void)
    68 {
    69     int n,m;
    70     cin>>n>>m;
    71     for(int i=1;i<=n;i++)
    72         scanf("%d",&a[i]);
    73     build(1,1,n);
    74     while(m--)
    75     {
    76         int op;
    77         scanf("%d",&op);
    78         if(op==1)
    79         {
    80             long long x,v,y;
    81             scanf("%lld%lld",&x,&v);
    82             y=v+x-1;
    83             if(y>n)y=n;
    84             update(1,x,y,v);
    85         }
    86         else
    87         {
    88             int x;
    89             scanf("%d",&x);
    90             printf("%d
    ",(a[x]+query(1,x))%(772002 + 233));
    91         }
    92     }
    93 }
    View Code
  • 相关阅读:
    面向对象程序设计第五次作业
    C++第一次作业
    面向对象程序设计第四次作业
    面向对象程序设计第三次作业
    C++自学笔记(3)
    C++自学随笔(2)
    软件测试2019:第七次作业—— 用户体验测试
    软件测试2019:第八次作业—— 缺陷管理(含缺陷管理工具的配置实验)
    软件测试2019:第六次作业—— Web功能测试(含Selenium IDE实验)
    软件测试2019:第五次作业—— 安全测试(含安全测试工具实验)
  • 原文地址:https://www.cnblogs.com/weeping/p/5456151.html
Copyright © 2011-2022 走看看