zoukankan      html  css  js  c++  java
  • BZOJ3038 上帝造题的七分钟2 线段树

    一个数最多是会被开方次数不会很多,所以直接暴力修改即可. 

    #include <bits/stdc++.h>  
    #define N 100005 
    #define ll long long  
    #define lson now<<1
    #define rson now<<1|1 
    #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout) 
    using namespace std;  
    int n,m,tag[N<<2]; 
    ll A[N],sum[N<<2];       
    void build(int l,int r,int now) 
    {
        if(l==r) 
        {
            sum[now]=A[l]; 
            if(sum[now]==1ll) tag[now]=1;      
            return; 
        }
        int mid=(l+r)>>1;   
        if(l<=mid) build(l,mid,lson); 
        if(r>mid)  build(mid+1,r,rson);    
        sum[now]=sum[lson]+sum[rson];  
        if(sum[now]==r-l+1) tag[now]=1;      
    } 
    ll query(int l,int r,int now,int L,int R) 
    {
        if(l>=L&&r<=R) return sum[now]; 
        int mid=(l+r)>>1; 
        ll re=0; 
        if(L<=mid) re+=query(l,mid,lson,L,R); 
        if(R>mid)  re+=query(mid+1,r,rson,L,R); 
        return re; 
    } 
    void update(int l,int r,int now,int L,int R) 
    {
        if(tag[now]) return ; 
        if(l==r) 
        {
            sum[now]=(ll)sqrt(sum[now]);  
            return; 
        } 
        int mid=(l+r)>>1;  
        if(L<=mid) update(l,mid,lson,L,R); 
        if(R>mid)  update(mid+1,r,rson,L,R);     
        sum[now]=sum[lson]+sum[rson]; 
        if(sum[now]==r-l+1) tag[now]=1;  
    }
    int main() 
    {  
        int i,j; 
        // setIO("input");  
        scanf("%d",&n);  
        for(i=1;i<=n;++i) scanf("%lld",&A[i]);     
        build(1,n,1);       
        scanf("%d",&m); 
        for(i=1;i<=m;++i) 
        {
            int op,l,r; 
            scanf("%d%d%d",&op,&l,&r); 
            if(l>r) swap(l,r);  
            if(op==1) 
            {
                printf("%lld
    ",query(1,n,1,l,r)); 
            } 
            else
            {
                update(1,n,1,l,r); 
            }
        }
        return 0; 
    }
    

      

  • 相关阅读:
    学电脑入门与提高
    Autodesk Revit Architecture 2014官方标准教程
    Photoshop移动UI界面设计实用教程 全彩超值版
    中文版SQL Server 2000开发与管理应用实例
    Excel2016数据处理与分析从新手到高手
    云计算(第三版)
    无线局域网搭建与管理
    R语言数据挖掘
    Spring 3.0就这么简单
    SVN使用教程总结
  • 原文地址:https://www.cnblogs.com/guangheli/p/11603062.html
Copyright © 2011-2022 走看看