题目链接

$CDQ$分治。

考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响。

计算时,排序加上树状数组即可。

然后再递归处理$[l,mid]$和$[mid+1,r]$。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=2000005;
struct data
{
int opt,x,y,y1,w,num;
data(int a=0,int b=0,int c=0,int d=0,int e=0,int f=0)
{opt=a,x=b,y=c,y1=d,w=e,num=f;}
}s[200005],g[200005];
bool cmp(data u,data v)
{return (u.x==v.x)?(u.opt<v.opt):(u.x<v.x);}
int ans[10005],val[2000100];
int lowbit(int x) {return x&(-x);}
void add(int x,int y) {for(;x<=MAX;x+=lowbit(x)) val[x]+=y;}
int ask(int x) {int ans=0;for(;x;x-=lowbit(x))ans+=val[x];return ans;}
void cln(int x) {for(;x<=MAX;x+=lowbit(x)) val[x]=0;}
int Get(int l,int r) {return ask(r)-ask(l-1);}
void Sol(int l,int mid,int r)
{
int k=0;
for(int i=l;i<=mid;i++)
if(s[i].opt==1) g[++k]=s[i];
for(int i=mid+1;i<=r;i++)
if(s[i].opt!=1) g[++k]=s[i];
sort(g+1,g+k+1,cmp);
for(int i=1;i<=k;i++)
{
if(g[i].opt==1) add(g[i].y,g[i].w);
if(g[i].opt==2) ans[g[i].num]-=Get(g[i].y,g[i].y1);
if(g[i].opt==3) ans[g[i].num]+=Get(g[i].y,g[i].y1);
}
for(int i=1;i<=k;i++)
if(g[i].opt==1) cln(g[i].y);
}
void CDQ(int l,int r)
{
if(l==r) return;
int mid=(l+r)>>1;
CDQ(l,mid),CDQ(mid+1,r);
Sol(l,mid,r);
}
int main()
{
int n=0,cnt=0,tot=0;
scanf("%d%d",&n,&n);
for(;;)
{
int opt=0;
scanf("%d",&opt);
if(opt==3) break;
if(opt==1)
{
s[++cnt].opt=1;
scanf("%d%d%d",&s[cnt].x,&s[cnt].y,&s[cnt].w);
s[cnt].x++,s[cnt].y++;
}
if(opt==2)
{
tot++;
s[++cnt].opt=2,s[cnt].num=tot;
scanf("%d%d",&s[cnt].x,&s[cnt].y),s[cnt].y++;
s[++cnt].opt=3,s[cnt].num=tot;
scanf("%d%d",&s[cnt].x,&s[cnt].y1),s[cnt].x++,s[cnt].y1++;
s[cnt].y=s[cnt-1].y;
s[cnt-1].y1=s[cnt].y1;
}
}
CDQ(1,cnt);
for(int i=1;i<=tot;i++) printf("%d\n",ans[i]);
return 0;
}

Luogu P4390

Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治的更多相关文章

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

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

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

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

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

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

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

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

  5. P4390 [BOI2007]Mokia 摩基亚

    传送门 对于一个询问 $(xa,ya),(xb,yb)$,拆成 $4$ 个询问并容斥一下 具体就是把询问变成求小于等于 $xb,yb$ 的点数,减去小于等于 $xa-1,yb$ 和小于等于 $xb,y ...

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

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

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

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

  8. [BOI2007]Mokia 摩基亚

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

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

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

随机推荐

  1. N皇后演示程序

    问题描述: 在N×N格的棋盘上放置彼此不受攻击的N个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子,求解可以放置的布局方式. 设计要求: (1) 要求实现图形化棋盘显示 ...

  2. 自制计算器 v1.1

    之前的v1.0版本功能还不够完善,这个版本一并做了修改. 代码,每个sub表示哪个按钮做了注释. Dim a, temp, ans As Integer Dim op As String Sub sh ...

  3. R和Rstudio的安装

    首先是安装R再安装Rstudio 链接放在这里: R语言软件以及Rstudio软件下载:链接:https://pan.baidu.com/s/11TH4mJjoi3QXGfamB697rw 密码:o1 ...

  4. Django学习day03随堂笔记

    每日测验 """ 今日考题 1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题 2.request ...

  5. js 获取转换网址中文参数

    var search = decodeURI(location.search).substr(1); console.log(search); decodeURI 方法返回一个已编码的统一资源标识符 ...

  6. ECSHOP产品内容页新增上传功能

    第一步:在 admin\templates\goods_info.htm中 <span class="tab-back" id="article-tab" ...

  7. Java面向对象系列(6)- 封装详解

    封装 该露的露,该藏得藏 我们程序设计要追求"高内聚,低耦合".高内聚就是类得内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量得方法给外部使用 封装(数据得隐藏) 通常 ...

  8. Ubuntu学习之alias命令

    Ubuntu学习之alias命令 1.1 alias功能介绍 当我们经常需要在命令窗键入复杂冗长的命令时,alias就派上用场啦.alias允许用户为命令创建简单的名称或缩写,哪怕这个缩写只有一个字符 ...

  9. P4323-[JSOI2016]独特的树叶【换根dp,树哈希】

    正题 题目链接:https://www.luogu.com.cn/problem/P4323 题目大意 给出\(n\)个点的树和加上一个点之后的树(编号打乱). 求多出来的是哪个点(如果有多少个就输出 ...

  10. ASP.NET Core 学习笔记 第二篇 依赖注入

    前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...