思路 :按照操作的时间进行分治,这样转化成了 时间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. Shell入门及实践

    解释器 解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行 #!/bin/bash(默认),指定解释器 #!/bin/bash #这是第一个shell脚本 ...

  2. centos2.6.18升级到2.6.39

    本来想升级到最新版本4.6的,但是不成功,即使3.4也不成功,暂且先升级到2.x最新版本. 步骤如下: 一 下载源码 https://www.kernel.org/pub/linux/kernel/ ...

  3. springboot 拦截器

    拦截器的实现: 创建自定义拦截器CustomInterceptor: package com.xc.boot.handler; import org.springframework.stereotyp ...

  4. 五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现     1.定义List集合,存入多个字符串     2.删除集合中字符串"def"     3.然后利用迭代器遍历集合元素并输出 import j ...

  5. SQLMAP注入教程-11种常见SQLMAP使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

  6. SSRF漏洞挖掘经验

    SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问 ...

  7. 🍓JavaScript 对象原型链继承的弊端 🍓

  8. linux tomcat单机部署多应用

    1.修改/etc/profile 增加tomcat环境变量

  9. java应用的优化【转】

    XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...

  10. 【原创】大叔问题定位分享(17)spark查orc格式数据偶尔报错NullPointerException

    spark查orc格式的数据有时会报这个错 Caused by: java.lang.NullPointerException at org.apache.hadoop.hive.ql.io.orc. ...