luogu

题意

支持平面内单点加一个值以及矩阵求和。

平面大小\(W\le2*10^6\),修改操作\(\le1.6*10^5\),查询操作\(\le10^4\)

sol

\(CDQ\)写一发。

把一个询问拆成四个点,类似二维前缀和的形式。这样对于每一个询问,相当于就是问满足\(x_i\le X,y_i\le Y\)的权值和。

树状数组维护即可。

code

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int gi()
  5. {
  6. int x=0,w=1;char ch=getchar();
  7. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  8. if (ch=='-') w=0,ch=getchar();
  9. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  10. return w?x:-x;
  11. }
  12. const int N = 2e6+5;
  13. struct node{
  14. int id,x,y,v,opt;
  15. bool operator < (const node &b) const
  16. {
  17. if (x!=b.x) return x<b.x;
  18. if (y!=b.y) return y<b.y;
  19. return !opt;
  20. }
  21. }p[N],q[N];
  22. int W,n,m,c[N],ans[N];
  23. void modify(int k,int v){while(k<=W)c[k]+=v,k+=k&-k;}
  24. int query(int k){int s=0;while(k)s+=c[k],k-=k&-k;return s;}
  25. void CDQ(int l,int r)
  26. {
  27. if (l==r) return;
  28. int mid=l+r>>1;CDQ(l,mid);CDQ(mid+1,r);
  29. int L=l,R=mid+1;
  30. for (int i=l;i<=r;++i)
  31. if (L<=mid&&(R>r||p[L]<p[R]))
  32. {
  33. q[i]=p[L++];
  34. if (!q[i].opt) modify(q[i].y,q[i].v);
  35. }
  36. else
  37. {
  38. q[i]=p[R++];
  39. if (q[i].opt) ans[q[i].v]+=query(q[i].y)*q[i].opt;
  40. }
  41. for (int i=l;i<=r;++i)
  42. {
  43. p[i]=q[i];
  44. if (p[i].id<=mid&&!p[i].opt) modify(q[i].y,-q[i].v);
  45. }
  46. }
  47. int main()
  48. {
  49. while (233)
  50. {
  51. int opt=gi();
  52. if (opt==0) W=gi();
  53. if (opt==1)
  54. {
  55. int x=gi(),y=gi(),v=gi();
  56. p[++n]=(node){n,x,y,v,0};
  57. }
  58. if (opt==2)
  59. {
  60. int x1=gi(),y1=gi(),x2=gi(),y2=gi();
  61. ++m;
  62. if (x1>1&&y1>1) p[++n]=(node){n,x1-1,y1-1,m,1};
  63. if (x1>1) p[++n]=(node){n,x1-1,y2,m,-1};
  64. if (y1>1) p[++n]=(node){n,x2,y1-1,m,-1};
  65. p[++n]=(node){n,x2,y2,m,1};
  66. }
  67. if (opt==3) break;
  68. }
  69. CDQ(1,n);
  70. for (int i=1;i<=m;++i) printf("%d\n",ans[i]);
  71. return 0;
  72. }

[Luogu4390][BOI2007]Mokia 摩基亚的更多相关文章

  1. 洛谷 P4390 [BOI2007]Mokia 摩基亚 解题报告

    P4390 [BOI2007]Mokia 摩基亚 题目描述 摩尔瓦多的移动电话公司摩基亚(\(Mokia\))设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户 ...

  2. 【BZOJ1176】[BOI2007]Mokia 摩基亚

    [BZOJ1176][BOI2007]Mokia 摩基亚 题面 bzoj 洛谷 题解 显然的\(CDQ\)\(/\)树套树题 然而根本不想写树套树,那就用\(CDQ\)吧... 考虑到点\((x1,y ...

  3. [BOI2007]Mokia 摩基亚

    Description: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫 ...

  4. cogs1752[boi2007]mokia 摩基亚 (cdq分治)

    [题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...

  5. P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫米.但其真正高科 ...

  6. [BOI2007]Mokia 摩基亚(CDQ分治)

    upd:\((x1,y1)(x2,y2)\)表示以\((x1,y1)\)为左上端点 \((x2,y2)\)为右下端点的矩形 本来以为是一道二位树状数组的模板,但是看数据范围之后就放弃了,边界既然到了2 ...

  7. P4390 [BOI2007]Mokia 摩基亚(cdq分治)

    一样是cdq的板子 照着园丁的烦恼就好了 代码 #include <cstdio> #include <cstring> #include <algorithm> ...

  8. 【cdq分治】【P4390】[BOI2007]Mokia 摩基亚

    Description 给你一个 \(W~\times~W\) 的矩阵,每个点有权值,每次进行单点修改或者求某子矩阵内权值和,允许离线 Input 第一行是两个数字 \(0\) 和矩阵大小 \(W\) ...

  9. [洛谷P4390][BOI2007]Mokia 摩基亚

    题目大意: 维护一个W*W的矩阵,每次操作可以增加某格子的权值,或询问某子矩阵的总权值. 题解:CDQ分治,把询问拆成四个小矩形 卡点:无 C++ Code: #include <cstdio& ...

随机推荐

  1. MySQL-5.7 DELETE语句详解

    1.语法 (1)单表 DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partit ...

  2. Oracle 事务处理

    事务的四大特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 2.一致性(Consistency) 一致性是指数据库在事务操作前和事 ...

  3. Centos6.5安装python2.7与pip

    安装Python2.7 安装环境 [root@localhost1 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@local ...

  4. [BZOJ1721][Usaco2006 Mar]Ski Lift 缆车支柱

    Description Farmer Ron in Colorado is building a ski resort for his cows (though budget constraints ...

  5. springboot--配置文件加载顺序

    -file:./config(内部配置) -file:./ (内部配置) -classpath:/config (外部配置) -classpath:/ (外部配置) 运维: spring -jar s ...

  6. MySQL 数据(数据库)迁移

    查找MySQL真正的Data目录 show variables like 'datadir'; +---------------+-----------------+ | Variable_name ...

  7. 怎样发布一个工程到自己的GitHub

    本人小白一枚: 第一次通过命令行的形式将自己的工程发布到自己的GitHub上去,还是请教了大神之后才完成的.通过总结经验,小白也掌握了一些关于往代码托管平台上发布工程的方式,其实只要用心学,里面的东西 ...

  8. javascript 对象简单介绍(一)

    JavaScript 对象JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...此外,JavaScript 允许自定义对象.所有事物都是对象JavaScript 提供多个内建对象, ...

  9. Git GUI 的使用

    下面,我们开始使用Git Gui 如果你想init一个本地的git仓库,到你的代码根目录下,右键选择Git Init Here 这时,你会发现在代码根目录下,生成了一个.git的隐藏属性目录. 再选择 ...

  10. Codeforces Round #250 (Div. 2)D

    给你一张无向图,每个点有一个权值,对于一条从l到r 的边权值是l到r路径上最小的点的权值,(多条路取最大的权值),然后求每两个点之间的权值和/点对数 题解:并查集维护,先从点大的边排序,然后依次加边, ...