zoukankan      html  css  js  c++  java
  • day1 晚上 P4145 上帝造题的七分钟2 / 花神游历各国 线段树

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cmath>
      4 
      5 using namespace std;
      6 
      7 const int maxn=1e6+10;
      8 struct node
      9 {
     10     int l,r;
     11     long long sum,maxx;
     12 }tree[maxn];
     13 long long n;
     14 long long num[maxn];
     15 long long pushup(long long x)
     16 {
     17     tree[x].sum=tree[x<<1].sum+tree[x<<1|1].sum;
     18     if(tree[x<<1].maxx>tree[x<<1|1].maxx)
     19     {
     20         tree[x].maxx=tree[x<<1].maxx;
     21     }
     22     else
     23     {
     24         tree[x].maxx=tree[x<<1|1].maxx;
     25     }
     26 }
     27 void build(long long x,long long l,long long r)
     28 {
     29     tree[x].l=l;
     30     tree[x].r=r;
     31     if(l==r)
     32     {
     33         tree[x].sum=tree[x].maxx=num[l];
     34         return ;
     35     }
     36     int mid=(l+r)>>1;
     37     build(x<<1,l,mid);
     38     build(x<<1|1,mid+1,r);
     39     pushup(x);
     40 }
     41 void modify(long long x,long long l,long long r)
     42 {
     43     if(tree[x].l==tree[x].r)
     44     {
     45         tree[x].sum=sqrt(tree[x].sum);
     46         tree[x].maxx=sqrt(tree[x].maxx);
     47         return ;
     48     }
     49     long long mid=(tree[x].l+tree[x].r)>>1;
     50     if(l<=mid&&tree[x<<1].maxx>1)
     51     {
     52         modify(x<<1,l,r);
     53     }
     54     if(r>mid&&tree[x<<1|1].maxx>1)
     55     {
     56         modify(x<<1|1,l,r);
     57     }
     58     pushup(x);
     59 }
     60 long long query(long x,long long l,long long r)
     61 {
     62     if(l<=tree[x].l&&r>=tree[x].r)
     63     {
     64         return tree[x].sum;
     65     }
     66     long long  mid=(tree[x].l+tree[x].r)>>1;
     67     long long  ans=0;
     68     if(l<=mid)
     69     {
     70         ans+=query(x<<1,l,r);
     71     }
     72     if(r>mid)
     73     {
     74         ans+=query(x<<1|1,l,r);
     75     }
     76     return ans;
     77 }
     78 int main()
     79 {
     80     cin>>n;
     81     for(long long i=1;i<=n;i++)
     82     {
     83         cin>>num[i];
     84     }
     85     build(1,1,n);
     86     long long m,opt,l,r;
     87     cin>>m;
     88     while(m--)
     89     {
     90         cin>>opt>>l>>r;
     91         if(l>r)
     92         {
     93             swap(l,r);
     94         }
     95         if(opt==0)
     96         {
     97             modify(1,l,r);
     98         }
     99         else
    100         {
    101             cout<<query(1,l,r)<<endl;
    102         }
    103     }
    104     return 0;
    105 }
  • 相关阅读:
    让.Net程序支持命令行启动
    拒绝卡顿——在WPF中使用多线程更新UI
    比NPOI更好用的Excel操作库——EPPlus
    利用Visual Studio Natvis 框架简化C++的变量调试工作
    使用LibZ合并.Net程序集,支持WPF
    SONY新的圈铁耳机
    找回VisualStudio异常设置中丢失的“用户未处理的(User-unhandled)”列
    去除下载文件属性中烦人的锁定状态
    POJ 3347 Kadj Squares
    POJ 1696 Space Ant(极角排序)
  • 原文地址:https://www.cnblogs.com/2529102757ab/p/11224802.html
Copyright © 2011-2022 走看看