思路 :按照操作的时间进行分治,这样转化成了 时间t ,x坐标,y坐标 经典的三维偏序。

最初时间就是递增顺序,无需排序直接进行第二维的分治,类似归并排序处理x坐标,在保证

x有序的情况下进行更新y坐标的树状数组。求一个  (x1,y1)   - (x2,y2)矩形内点的个数,简单容斥一下

求[ (1,1) ——(x1-1,y1-1) ]+[ (1,1) ——(x2,y2) ]-[ (1,1) ——(x1-1,y1) ]-[ (1,1) ——(x1,y1-1) ]

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 2234567
ll op,w,s,x[3],y[3];
ll cnt,q[maxn],tot;
ll ans[maxn],tree[maxn];
struct node
{
int x,y,id,ad;
} data[maxn],cp[maxn];
int lowbit(int x)
{
return x&-x;
}
void add(int x,int d)
{
while(x<=w)
{
tree[x]+=d;
x+=lowbit(x);
}
}
ll query(int x)
{
ll re=0;
while(x>0)
{
re+=tree[x];
x-=lowbit(x);
}
return re;
}
void cdq(int l,int r)
{
if(l>=r)return ;
int mid=(l+r)/2;
cdq(l,mid);
cdq(mid+1,r);
int t1=l,t2=mid+1,ct=l;
while(t2<=r)
{
while(data[t1].x<=data[t2].x&&t1<=mid)
{
if(data[t1].id==0)
add(data[t1].y,data[t1].ad);
cp[ct++]=data[t1++];
}
if(data[t2].id!=0)ans[data[t2].ad]+=query(data[t2].y);
cp[ct++]=data[t2++];
}
for(int i=l; i<t1; i++)
if(data[i].id==0)
add(data[i].y,-data[i].ad);
while(t1<=mid)cp[ct++]=data[t1++];
while(t2<=r)cp[ct++]=data[t2++];
for(int i=l; i<=r; i++)
data[i]=cp[i];
}
int main()
{
scanf("%lld%lld",&s,&w);
while(1)
{
scanf("%lld",&op);
if(op==1)
{
data[++cnt].id=0;
scanf("%lld%lld%lld",&data[cnt].x,&data[cnt].y,&data[cnt].ad);
}
else if(op==2)
{
scanf("%lld%lld%lld%lld",&x[1],&y[1],&x[2],&y[2]);
q[++tot]=cnt+1;
ans[cnt+4]+=(y[2]-y[1]+1)*(x[2]-x[1]+1)*s;
data[++cnt].x=x[1]-1,data[cnt].y=y[1]-1,data[cnt].id=2,data[cnt].ad=cnt;
data[++cnt].x=x[1]-1,data[cnt].y=y[2],data[cnt].id=2,data[cnt].ad=cnt;
data[++cnt].x=x[2],data[cnt].y=y[1]-1,data[cnt].id=2,data[cnt].ad=cnt;
data[++cnt].x=x[2],data[cnt].y=y[2],data[cnt].id=3,data[cnt].ad=cnt;
}
else break;
}
cdq(1,cnt);
for(int i=1; i<=tot; i++)
printf("%lld\n",ans[q[i]+3]-ans[q[i]+1]-ans[q[i]+2]+ans[q[i]]);
return 0;
}

  

BZOJ-10-1176: [Balkan2007]Mokia-CDQ第二类应用的更多相关文章

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

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

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

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

  3. 【BZOJ】1176: [Balkan2007]Mokia(cdq分治)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1176 在写这题的时候思维非常逗啊........2333................... 最后 ...

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

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

  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

    [题意]n*n的矩阵,初始值为0(题面有误),m次操作,增加一个格子的权值,或查询子矩阵和.n<=2*10^6.(m应该较题面所述偏大). [算法]CDQ分治(算法知识见数据结构) [题解]三维 ...

  7. BZOJ 1176: [Balkan2007]Mokia

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2012  Solved: 896[Submit][St ...

  8. 1176: [Balkan2007]Mokia

    1176: [Balkan2007]Mokia 链接 分析 三维偏序问题,CDQ分治论文题. 代码 #include<bits/stdc++.h> using namespace std; ...

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

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

  10. bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 第二类斯特林数展开式: \( S(i,j) = \frac{1}{j!} \sum\l ...

随机推荐

  1. A.01.11—模块的输出—输出复用和可配

    对于输入来说,高边输入与低边输入可配,那对于输出来说,它有哪些可配的情况呢. 下图中展示了2种常见的类型. 第一种为同一驱动芯片内部的情况.对于OPL与ODL,即PWM低端输出和固态的低端输出,它们是 ...

  2. 指针运算中的运算符:&和*

    这里&是取地址运算符,*是间接运算符. &a 的运算结果是一个指针,指针的类型是 a 的类型加个 *,指针所指向的类型是 a 的类型,指针所指向的地址嘛,那就是 a 的地址. *p 的 ...

  3. Vue笔记:使用 axios 中 this 指向问题

    问题背景 在vue中使用axios做网络请求的时候,会遇到this不指向vue,而为undefined. 如下图所示,我们有一个 login 方法,希望在登录成功之后路由到主页,但通过 this.$r ...

  4. npm install 之前做的事

    在一个项目目录中,npm install之前,需要npm init,npm init会问你几个问题,有的需要输入,不想输入的一路回车就行,之后会自动创建一个package.json文件,有了这个pac ...

  5. Entity Framework入门教程(14)---DbFirst下的存储过程

    EF6中DbFirst模式下使用存储过程 我们已经知道EF可以将L2E或Entity SQL的查询语句自动转换成SQL命令,也可以根据实体的状态自动生成Insert/update/delete的Sql ...

  6. 2018-2019-2 实验一 Java开发环境的熟悉

    实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编译.运行.调试Java程序 实验知识点 1. JVM.JRE.JDK的安装位置与区别: 2. 命令行运行javac:ja ...

  7. C#中访问私有成员技巧

    源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你想知道私有成员的值,甚至去想直接调用类里面的私有方法.那怎么办呢?其实在.net中访问私有 ...

  8. eclipse+tomcat出现警告警告: [SetPropertiesRule]...

    启动tomcat出现警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to ' ...

  9. XXE漏洞学习

    0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文 ...

  10. ActiveMQ之topic主题模式

    开发环境我们使用的是ActiveMQ 5.11.1 Release的Windows版,官网最新版是ActiveMQ 5.12.0 Release,大家可以自行下载,下载地址.需要注意的是,开发时候,要 ...