题目大意:

洛谷传送门

三维偏序裸题。。

每次操作都看成一个三元组$<x,y,t>$,表示$x,y$坐标和操作时间$t $

询问操作拆成$4$个容斥

接下来就是$CDQ$了,外层按t排序,回溯时按$x$排序,用树状数组处理$y$这一维即可

 #include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 201000
#define M1 2001000
#define ll long long
#define dd double
#define inf 0x3f3f3f3f3f3f3f3fll
using namespace std; int gint()
{
int ret=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int n,m,ma;
struct BIT{
int s[M1];
void update(int x,int w){ for(int i=x;i<=ma;i+=(i&(-i))) s[i]+=w; }
int query(int x){ int ans=; for(int i=x;i;i-=(i&(-i))) ans+=s[i]; return ans; }
void clr(int x){ for(int i=x;i<=ma;i+=(i&(-i))) s[i]=;}
}s;
struct node{int x,y,w,t,ans,p;}a[N1],tmp[N1];
int cmp1(node s1,node s2){ if(s1.x!=s2.x) return s1.x<s2.x; return s1.y<s2.y; }
int cmp2(node s1,node s2){ if(s1.x!=s2.x) return s1.x<s2.x; return s1.y<=s2.y; }
int que[N1],tl; void CDQ(int L,int R)
{
if(R-L<=) return;
int i,j,k,M=(L+R)>>;
for(i=L,j=M,k=L;k<R;k++)
{
if(a[k].t<M) tmp[i++]=a[k];
else tmp[j++]=a[k];
}
for(k=L;k<R;k++) a[k]=tmp[k];
CDQ(L,M);
for(i=L,j=M;i<M&&j<R;)
{
if(cmp2(a[i],a[j])){ if(!a[i].p) { s.update(a[i].y,a[i].w); que[++tl]=i; } i++; }
else{ if(a[j].p) a[j].ans+=s.query(a[j].y); j++; }
}
while(i<M){ i++; }
while(j<R){ a[j].ans+=s.query(a[j].y); j++; }
while(tl){ s.clr(a[que[tl--]].y); }
CDQ(M,R);
for(i=L,j=M,k=;i<M&&j<R;)
{
if(cmp2(a[i],a[j])) tmp[++k]=a[i++];
else tmp[++k]=a[j++];
}
while(i<M){ tmp[++k]=a[i++]; }
while(j<R){ tmp[++k]=a[j++]; }
for(k=L;k<R;k++) a[k]=tmp[k-L+];
}
int f[N1]; int main()
{
int i,op,xx1,xx2,yy1,yy2,w; op=gint(); ma=gint();
while(scanf("%d",&op)&&op!=)
{
if(op==) { n++; a[n].x=gint(); a[n].y=gint(); a[n].w=gint(); a[n].t=n;}
if(op==)
{
xx1=gint(); yy1=gint(); xx2=gint(); yy2=gint(); m++;
n++; a[n].x=xx1-; a[n].y=yy1-; a[n].t=n; a[n].w=m; a[n].p=;
n++; a[n].x=xx2; a[n].y=yy1-; a[n].t=n; a[n].w=m; a[n].p=-;
n++; a[n].x=xx1-; a[n].y=yy2; a[n].t=n; a[n].w=m; a[n].p=-;
n++; a[n].x=xx2; a[n].y=yy2; a[n].t=n; a[n].w=m; a[n].p=;
}
}
sort(a+,a+n+,cmp1);
CDQ(,n+);
for(i=;i<=n;i++)
{
if(!a[i].w) continue;
f[a[i].w]+=a[i].p*a[i].ans;
}
for(i=;i<=m;i++) printf("%d\n",f[i]);
return ;
}

BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)的更多相关文章

  1. BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 这明明是一道KD-Tree,CDQ分治是TLE的做法 化简式子,$|x1-x2|-|y1-y2|=(x1+y1)-(x2+y2)$ 而$CDQ$分治只能解决$x1 \leq x ...

  2. BZOJ 2141 排队 (三维偏序CDQ+树状数组)

    题目大意:略 洛谷传送门 和 [CQOI2015]动态逆序对 这道题一样的思路 一开始的序列视为$n$次插入操作 把每次交换操作看成四次操作,删除$x$,删除$y$,加入$x$,加入$y$ 把每次操作 ...

  3. BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数 ...

  4. BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 三维偏序裸题 首先,把三元组关于$a_{i}$排序 然后开始$CDQ$分治,回溯后按$b_{i}$排序 现在要处理左侧对右侧的影响了,显然现在左侧三元组的$a_{i}$都小于等 ...

  5. 洛谷P3810-陌上开花(三维偏序, CDQ, 树状数组)

    链接: https://www.luogu.org/problem/P3810#submit 题意: 一个元素三个属性, x, y, z, 给定求f(b) = {ax <= bx, ay < ...

  6. bzoj3262陌上花开 三维数点 cdq+树状数组

    大早上的做了一道三维数点一道五位数点,神清气爽! 先给一维排序,变成一个奇怪的动态的二维数点(相当于有一个扫描面扫过去,导致一系列的加点和询问) 然后cdq分治,再变回静态,考虑前半段对后半段的影响 ...

  7. bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组

    [bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...

  8. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  9. bzoj3262: 陌上花开(CDQ+树状数组处理三维偏序问题)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3262 题目大意:中文题目 具体思路:CDQ可以处理的问题,一共有三维空间,对于第一维我们 ...

随机推荐

  1. BZOJ 4951 [WF2017]Money for Nothing (决策单调优化DP+分治)

    题目大意:略 题目传送门 不愧是$World final$的神题,代码短,思维强度大,细节多到吐..调了足足2h 贪心 我们利用贪心的思想,发现有一些工厂/公司是非常黑心的 以工厂为例,对于一个工厂$ ...

  2. maven 依赖的传递性

    1.如图我们有三个项目,项目Age,项目Bge,项目Cge 2.我们使Age项目依赖到Bge项目,Bge项目依赖到Cge项目 Age项目和Bge项目分别执行命令:mvn install  打包*.ja ...

  3. 常用前端布局,CSS技巧介绍

    常用前端布局,CSS技巧介绍 对前端常用布局的整理总结,并对其性能优劣,兼容等情况进行介绍 css常用技巧之可变大小正方形的绘制 1:若通过设置width为百分比的方式,则高度不能通过百分比来控制. ...

  4. C# 低耦合 高内聚

    低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖       内聚性 内聚性又称块内联 ...

  5. html 页面刷新

    JS 脚本 方法1 setInterval 函数 定时局部刷新用到jQuery里面的setInterval方法, 该函数每隔一段时间请求一次数据,然后将请求结果返回给前端HTML实现刷新. setIn ...

  6. 1003. 我要通过!(20) (ZJUPAT 模拟)

    题目链接:http://pat.zju.edu.cn/contests/pat-b-practise/1003 "答案正确"是自己主动判题系统给出的最令人欢喜的回复.本题属于PAT ...

  7. 通过PowerShell卸载全部的SharePoint 2010 解决方式

    通过PowerShell卸载全部的SharePoint 2010 解决方式         为了演示.我常常须要拆毁再重建SharePoint 2010 环境.         我常常须要用到的操作就 ...

  8. QT使用tableWidget显示双排列表 而且选中用红框圈出来

    如需转载请标明出处:http://blog.csdn.net/itas109 整个project下载地址:http://download.csdn.net/detail/itas109/7607735 ...

  9. File and Folder Permissions

    https://msdn.microsoft.com/en-us/library/bb727008.aspx On NTFS volumes, you can set security permiss ...

  10. yarn架构——本质上是在做解耦 将资源分配和应用程序状态监控两个功能职责分离为RM和AM

    Hadoop YARN架构解读 原Mapreduce架构 原理架构图如下: 图 1.Hadoop 原 MapReduce 架构 原 MapReduce 程序的流程:首先用户程序 (JobClient) ...