zoukankan      html  css  js  c++  java
  • UOJ#495晒被子

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<ctime>
     8 #include<deque>
     9 using namespace std;
    10 const long long N=2000005;
    11 long long n,m,x1,y11,x2,y2,t;
    12 struct tree{
    13     long long l,r,a,b,c;
    14 }tree[4*N];
    15 void build(long long o,long long l,long long r){
    16     tree[o].a=tree[o].b=tree[o].c=0;
    17     tree[o].l=l;
    18     tree[o].r=r;
    19     if(l==r){
    20         return;
    21     }
    22     long long mid=(l+r)/2;
    23     build(o*2,l,mid);
    24     build(o*2+1,mid+1,r);
    25 }
    26 void pushdown(long long o){
    27     tree[o*2].a+=tree[o].a;
    28     tree[o*2].b+=tree[o].b;
    29     tree[o*2].c+=tree[o].c;
    30     tree[o*2+1].a+=tree[o].a;
    31     tree[o*2+1].b+=tree[o].b;
    32     tree[o*2+1].c+=tree[o].c;
    33     tree[o].a=tree[o].b=tree[o].c=0;
    34 }
    35 long long query(long long o,long long k){
    36     long long l=tree[o].l,r=tree[o].r;
    37     if(l==r){
    38         return k*k*tree[o].a+k*tree[o].b+tree[o].c;
    39     }
    40     long long mid=(l+r)/2;
    41     pushdown(o);
    42     if(k<=mid){
    43         return query(o*2,k);
    44     }
    45     else{
    46         return query(o*2+1,k);
    47     }
    48 }
    49 void update(long long o,long long ql,long long qr,long long a,long long b,long long c){
    50     long long l=tree[o].l,r=tree[o].r;
    51     if(ql<=l&&r<=qr){
    52         tree[o].a+=a;
    53         tree[o].b+=b;
    54         tree[o].c+=c;
    55         return;
    56     }
    57     long long mid=(l+r)/2;
    58     if(ql<=mid){
    59         update(o*2,ql,qr,a,b,c);
    60     }
    61     if(qr>mid){
    62         update(o*2+1,ql,qr,a,b,c);
    63     }
    64 }
    65 int main(){
    66     scanf("%lld%lld",&n,&m);
    67     build(1,1,200000);
    68     for(long long i=1;i<=n;i++){
    69         scanf("%lld%lld%lld%lld",&x1,&y11,&x2,&y2);
    70         update(1,max(x2,y2)+1,200000,0,0,(x2-x1)*(y2-y11));
    71         if(x2<y2){
    72             update(1,max(x2,y11)+1,y2,0,x2-x1,y11*(x1-x2));
    73         }
    74         else{
    75             update(1,max(x1,y2)+1,x2,0,y2-y11,x1*(y11-y2));
    76         }
    77         if(max(x1,y11)<min(x2,y2)){
    78             update(1,max(x1,y11),min(x2,y2),1,-(x1+y11),x1*y11);
    79         }
    80     }
    81     for(long long i=1;i<=m;i++){
    82         scanf("%lld",&t);
    83         printf("%lld
    ",query(1,t));
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    Android Api 检查參数状态Api
    【Jquery】prop与attr的差别
    【CODEFORCES】 A. Dreamoon and Sums
    使用&lt;jsp:include&gt;,不想写死URL,动态生成URL的解决的方法
    android.app.Activity 的介绍
    字符变换
    android之获取屏幕的宽度和高度
    2015跑过的路
    hdu5418--Victor and World(floyd+状压dp)
    解决PL/SQL Developer 连接oracle 11g 64位中的问题
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11351218.html
Copyright © 2011-2022 走看看