传送门

调了半天发现是输出优化打错了求心理阴影体积233

这题很简单啊。

一个修改操作x如果对一个询问操作y有贡献那么有。

tx&lt;ty,Xx&lt;=Xy,Yx&lt;=Yy" role="presentation" style="position: relative;">tx<ty,Xx<=Xy,Yx<=Yytx<ty,Xx<=Xy,Yx<=Yy,其中t是时间,X,Y是坐标,这就是一个普通的三维偏序了。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 650000
  3. #define M 2000005
  4. #define K 10005
  5. using namespace std;
  6. struct Pot{int x,y,z,t,id,f;}q[N+K],tmp[N+K];
  7. int n,s,k,m,bit[M],ans[K];
  8. inline int read(){
  9. int ans=0,w=1;
  10. char ch=getchar();
  11. while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
  12. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  13. return ans*w;
  14. }
  15. inline void write(int x){
  16. if(x<0)putchar('-'),x=-x;
  17. if(x>9)write(x/10);
  18. putchar((x%10)^48);
  19. }
  20. inline int lowbit(int x){return x&-x;}
  21. inline void update(int x,int v){for(int i=x;i<=n;i+=lowbit(i))bit[i]+=v;}
  22. inline int query(int x){int ret=0;for(int i=x;i;i-=lowbit(i))ret+=bit[i];return ret;}
  23. inline void solve(int l,int r){
  24. if(l==r)return;
  25. int mid=l+r>>1,pos1=l,pos2=mid+1;
  26. for(int i=l;i<=r;++i){
  27. if(q[i].t<=mid&&!q[i].f)update(q[i].y,q[i].z);
  28. if(q[i].t>mid&&q[i].f)ans[q[i].id]+=q[i].z*query(q[i].y);
  29. }
  30. for(int i=l;i<=r;++i)if(q[i].t<=mid&&!q[i].f)update(q[i].y,-q[i].z);
  31. for(int i=l;i<=r;++i)
  32. if(q[i].t<=mid)tmp[pos1++]=q[i];
  33. else tmp[pos2++]=q[i];
  34. for(int i=l;i<=r;++i)q[i]=tmp[i];
  35. solve(l,mid),solve(mid+1,r);
  36. }
  37. inline bool cmp(Pot a,Pot b){return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.f<b.f);}
  38. int main(){
  39. s=read(),n=read();
  40. int op;
  41. while((op=read())!=3){
  42. int x=read(),y=read(),z=read();
  43. if(op==1)q[++k]=(Pot){x,y,z,k,m,0};
  44. else{
  45. int w=read();
  46. ++m,--x,--y;
  47. q[++k]=(Pot){x,y,1,k,m,1};
  48. q[++k]=(Pot){x,w,-1,k,m,1};
  49. q[++k]=(Pot){z,y,-1,k,m,1};
  50. q[++k]=(Pot){z,w,1,k,m,1};
  51. }
  52. }
  53. sort(q+1,q+k+1,cmp),solve(1,k);
  54. for(int i=1;i<=m;++i)write(ans[i]),puts("");
  55. return 0;
  56. }

2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)的更多相关文章

  1. BZOJ1176: [Balkan2007]Mokia CDQ分治

    最近很不对啊=w= 写程序全是bug啊 ans数组开小了竟然一直不知道,小数据没问题大数据拍不过,交上去RE 蛋疼半天 这个主要把每次询问拆成3个询问. #include<cstdio> ...

  2. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  3. BZOJ 1176[Balkan2007]Mokia(CDQ分治)

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3381  Solved: 1520[Submit][S ...

  4. [BZOJ1176][Balkan2007]Mokia cdq+树状数组

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1395[Submit][S ...

  5. BZOJ 1176: [Balkan2007]Mokia [CDQ分治]

    题意: 有一个n * n的棋盘,每个格子内有一个数,初始的时候全部为0.现在要求维护两种操作: 1)Add:将格子(x, y)内的数加上A. 2)Query:询问矩阵(x0, y0, x1, y1)内 ...

  6. BZOJ 1176 [Balkan2007]Mokia ——CDQ分治

    [题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...

  7. bzoj1176: [Balkan2007]Mokia cdq

    链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...

  8. bzoj1176: [Balkan2007]Mokia【cdq分治】

    把询问搞成4个,cdq分治. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a;i <= b; i++) #d ...

  9. BZOJ1176 [Balkan2007]Mokia 【CDQ分治】

    题目 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输入格式 ...

随机推荐

  1. <、>&、<& 重定向符

    <.>&.<& 重定向符 这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料.(本人已查过,网上也查不到相 ...

  2. S+ hidden tray with window start

    官方论坛上有个帖子给出了答案: I forgot that this is supported in the code, but it requires a little editing of the ...

  3. 7 python 类的组合

    1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...

  4. setTranslatesAutoresizingMaskIntoConstraints

    [viewItem setTranslatesAutoresizingMaskIntoConstraints:NO]; 在给继承UIView的类设置此属性后,UIView的某些属性可能发生变化.例如f ...

  5. mysql 慢查询记录方法

    ========================================================= 方法一: 这个方法我正在用,呵呵,比较喜欢这种即时性的. Mysql5.0以上的版本 ...

  6. SQL语言类别

    SQL语言主要分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. DQL (data query language) DML(data manipulati ...

  7. Git reset head revert 回滚

    Overview 涉及Git一些日常操作 :) 基础知识 <Pro Git>至少了解branch,commit的概念,及基本的原理 Git常用魔法 存档:master代码回滚方法 我是QA ...

  8. 基元线程同步构造 AutoResetEvent和ManualResetEvent 线程同步

    在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别.ManualResetEvent和AutoResetEvent都 ...

  9. js中函数传参的情况

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 吴裕雄 python 数据处理(2)

    import pandas as pd data = pd.read_csv("F:\\python3_pachongAndDatareduce\\data\\pandas data\\hz ...