zoukankan      html  css  js  c++  java
  • bzoj3110树套树

    wa一片,最后一个T,终于心碎了。。。

    为什么没人告诉我要开longlong

    为什么所有人都说没有负数

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define mid ((l+r)>>1)
     4 using namespace std;
     5 long long cas,a,b,c,k,l,r,n,m,sz;
     6 int root[200005];
     7 int ls[10000005],rs[10000005],sum[10000005],lazy[10000005];
     8 void pushdown(int k,int l,int r)
     9 {
    10     if(!lazy[k]||l==r)return;
    11     if(!ls[k])ls[k]=++sz;
    12     if(!rs[k])rs[k]=++sz;
    13     lazy[ls[k]]+=lazy[k];lazy[rs[k]]+=lazy[k];
    14     sum[ls[k]]+=(mid-l+1)*lazy[k];
    15     sum[rs[k]]+=(r-mid)*lazy[k];
    16     lazy[k]=0;
    17 }
    18 void add(int k,int l,int r,int a,int b)
    19 {
    20     if(l==a&&r==b)
    21     {
    22         sum[k]+=r-l+1;
    23         lazy[k]++;
    24         return;
    25     }
    26     pushdown(k,l,r);
    27     if(a<=mid)ls[k]=ls[k]?ls[k]:++sz,add(ls[k],l,mid,a,min(b,mid));
    28     if(b>mid)rs[k]=rs[k]?rs[k]:++sz,add(rs[k],mid+1,r,max(mid+1,a),b);
    29     sum[k]=sum[ls[k]]+sum[rs[k]];
    30 }
    31 long long que(int k,int l,int r,int a,int b)
    32 {
    33     if(!k)return 0;
    34     if(l==a&&r==b)return sum[k];
    35     pushdown(k,l,r);
    36     if(b<=mid)return que(ls[k],l,mid,a,b);
    37     else if(a>mid)return que(rs[k],mid+1,r,a,b);
    38     else return que(ls[k],l,mid,a,mid)+que(rs[k],mid+1,r,mid+1,b);
    39 }
    40 int solve()
    41 {
    42     int l=1,r=2*n,k=1;
    43     while(l!=r)
    44     {
    45         long long t=que(root[k<<1|1],1,n,a,b);
    46         if(c<=t)l=mid+1,k=k<<1|1;
    47         else r=mid,k=k<<1,c-=t;
    48     }
    49     return l;
    50 }
    51 int main()
    52 {
    53     for(scanf("%d%d",&n,&m);m;m--)
    54     {
    55         scanf("%d%d%d%d",&cas,&a,&b,&c);
    56         if(cas==1)
    57             for(k=1,l=1,r=2*n,c+=n;l!=r;root[k]=root[k]?root[k]:++sz,add(root[k],1,n,a,b))
    58                 if(c<=mid)r=mid,k=k<<1;
    59                 else l=mid+1,k=k<<1|1;
    60         else printf("%d
    ",solve()-n);
    61     }
    62     return 0;
    63 }

    这次代码还是比较优美的

  • 相关阅读:
    解决浏览器跨域限制方案之WebSocket
    解决浏览器跨域限制方案之CORS
    解决浏览器跨域限制方案之JSONP
    浏览器跨域限制概述
    tomcat cluster配置实战注意事项
    学习go语言编程系列之定义变量
    修改xshell的默认字间距和行间距
    学习go语言编程系列之helloworld
    hive操作语句使用详解
    Hive通过查询语句向表中插入数据注意事项
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5879580.html
Copyright © 2011-2022 走看看