• 线段树区间修改 HDU 1698


     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 struct Node
     7 {
     8     int l;
     9     int r;
    10     int sum;
    11     int lz;
    12 }bn[400000];
    13 
    14 void build(int k,int l,int r)
    15 {
    16     bn[k].l=l;
    17     bn[k].r=r;
    18     bn[k].lz=0;
    19     if(l==r)
    20     {
    21         bn[k].sum=1;
    22         return ;
    23     }
    24     int lk=k*2;
    25     int rk=lk+1;
    26     int mid=(l+r)/2;
    27     build(lk,l,mid);
    28     build(rk,mid+1,r);
    29     bn[k].sum=bn[lk].sum+bn[rk].sum;
    30 }
    31 
    32 void push(int k)
    33 {
    34     int lk=k*2;
    35     int rk=lk+1;
    36     bn[lk].sum=(bn[lk].r-bn[lk].l+1)*bn[k].lz;
    37     bn[rk].sum=(bn[rk].r-bn[rk].l+1)*bn[k].lz;
    38     bn[lk].lz=bn[k].lz;
    39     bn[rk].lz=bn[k].lz;
    40     bn[k].lz=0;
    41 }
    42 
    43 void change(int k,int l,int r,int a)
    44 {
    45     if(bn[k].l==l&&bn[k].r==r)
    46     {
    47         bn[k].sum=a*(bn[k].r-bn[k].l+1);
    48         bn[k].lz=a;
    49         return ;
    50     }
    51     if(bn[k].lz)
    52         push(k);
    53     int lk=k*2;
    54     int rk=lk+1;
    55     if(bn[lk].r>=r)
    56         change(lk,l,r,a);
    57     else if(bn[rk].l<=l)
    58         change(rk,l,r,a);
    59     else
    60     {
    61         change(lk,l,bn[lk].r,a);
    62         change(rk,bn[rk].l,r,a);
    63     }
    64     bn[k].sum=bn[lk].sum+bn[rk].sum;
    65 }
    66 
    67 int main()
    68 {
    69     int t;
    70     cin>>t;
    71     for(int l=1;l<=t;l++)
    72     {
    73         int n;
    74         scanf("%d",&n);
    75         build(1,1,n);
    76         int s;
    77         scanf("%d",&s);
    78         while(s--)
    79         {
    80             int a,b,c;
    81             scanf("%d%d%d",&a,&b,&c);
    82             change(1,a,b,c);
    83         }
    84         cout<<"Case "<<l<<": The total value of the hook is ";
    85         cout<<bn[1].sum<<'.'<<endl;
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    eclipse 不自动提示和Alt + / 没提示和eclipse增强代码提示
    uboot 添加命令
    ps and kill command
    C 类型volatile 的作用
    git tutorial
    python 与命令
    C++ new and delete
    Glade3 tutorial in chinese
    查找IP与MAC
    ns3 无线资料
  • 原文地址:https://www.cnblogs.com/wsruning/p/4691357.html
Copyright © 2020-2023  润新知