zoukankan      html  css  js  c++  java
  • hdu 3074 Multiply game(模板级线段树)

    离机房关门还有十分钟,这点时间能干些什么?故作沉思地仰望星空,重新捋一下一天的学习进度,或者,砍掉一棵模板级线段树。

    纯模板,就是把单点更新,区间求和改为单点更新,区间求积。

    1A。

    #include<stdio.h>
    #include<string.h>
    #define M 1000000007
    #define N 50005
    struct node
    {
        int x,y;
        __int64 sum;
    }a[N*3];
    void CreatTree(int t,int x,int y)
    {
        a[t].x=x;
        a[t].y=y;
        a[t].sum=0;
        if(x==y)
            return ;
        int temp=t*2;
        int mid=(x+y)/2;
        CreatTree(temp,x,mid);
        CreatTree(temp+1,mid+1,y);
        return ;
    }
    void InsertTree(int t,int x,int k)
    {
        if(a[t].x==a[t].y)
        {
            a[t].sum=k;
            return ;
        }
        int temp=t*2;
        int mid=(a[t].x+a[t].y)/2;
        if(x<=mid)
            InsertTree(temp,x,k);
        else
            InsertTree(temp+1,x,k);
        a[t].sum=a[temp].sum*a[temp+1].sum%M;
        return ;
    }
    __int64 FindTree(int t,int x,int y)
    {
        __int64 sum=1;
        if(a[t].x==x&&a[t].y==y)
            return a[t].sum;
        int temp=t*2;
        int mid=(a[t].x+a[t].y)/2;
        if(y<=mid)
            sum*=FindTree(temp,x,y);
        else if(x>mid)
            sum*=FindTree(temp+1,x,y);
        else
        {
            sum=FindTree(temp,x,mid)*sum%M;
            sum=FindTree(temp+1,mid+1,y)*sum%M;
        }
        return sum;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n;
            scanf("%d",&n);
            CreatTree(1,1,n);
            int i;
            for(i=1;i<=n;i++)
            {
                int x;
                scanf("%d",&x);
                InsertTree(1,i,x);
            }
            int m;
            scanf("%d",&m);
            while(m--)
            {
                int x,y,z;
                scanf("%d%d%d",&x,&y,&z);
                if(x==0)
                    printf("%I64d
    ",FindTree(1,y,z));
                else
                    InsertTree(1,y,z);
            }
        }
        return 0;
    }


  • 相关阅读:
    Object Files (.obj)
    使用IIS Microsoft的web服务器和ftp服务器
    关于matlab
    char, signed char, unsigned char的区别
    百度面试
    google笔试题_2011
    ioctl 函数与网络接口
    Unity之热更新:(三)XLua
    C#之设计模式:观察者模式
    C#:委托
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3201409.html
Copyright © 2011-2022 走看看