cdq分治入门--BZOJ1176: [Balkan2007]Mokia
对w*w,w<=2000000的矩形,一开始全是0(或一开始全是s),n<=170000个操作,每次操作:矩阵内某点加上一个数,查某一个子矩阵的和,保证修改数<=160000,询问数<=10000。
这还是一个比较明显的三维偏序:时间维,以及x和y。由于现在时间维是一个Ti<Tj,而x和y是要查x1<=x<=x2,y1<=y<=y2,查一个范围答案在归并排序直接查不方便,所以一个询问拆4个,就变成普通的三维偏序了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
//#include<iostream>
using namespace std; int n,m,s;
#define maxn 300011
#define maxm 2000011
struct Point
{
int x,y,v;bool type;
//type=1:Q type=0:A
}a[maxn];
int ans[maxn]; struct BIT
{
int a[maxm],n;
void clear(int m) {n=m;memset(a,,sizeof(a));}
void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]+=v;}
int query(int x) {int ans=;for (;x;x-=x&-x) ans+=a[x];return ans;}
}t; int ord[maxn],tmpord[maxn];
void solve(int L,int R)
{
if (L==R) {ord[L]=L;return;}
const int mid=(L+R)>>;
solve(L,mid);
solve(mid+,R);
int i=L,j=mid+,k=L;
while (i<=mid && j<=R)
{
if (a[ord[i]].x<=a[ord[j]].x)
{
if (a[ord[i]].type==)
t.add(a[ord[i]].y,a[ord[i]].v);
tmpord[k++]=ord[i++];
}
else
{
if (a[ord[j]].type)
ans[ord[j]]+=t.query(a[ord[j]].y);
tmpord[k++]=ord[j++];
}
}
for (;j<=R;j++)
{
if (a[ord[j]].type) ans[ord[j]]+=t.query(a[ord[j]].y);
tmpord[k++]=ord[j];
}
for (int ii=L;ii<i;ii++) if (!a[ord[ii]].type) t.add(a[ord[ii]].y,-a[ord[ii]].v);
for (;i<=mid;i++) tmpord[k++]=ord[i];
for (int x=L;x<=R;x++) ord[x]=tmpord[x];
} int main()
{
scanf("%d%d",&s,&m);
t.clear(m);
n=;
int op,x,y,z,w;
while (scanf("%d",&op) && op!=)
{
if (op-)
{
scanf("%d%d%d%d",&x,&y,&z,&w);
a[++n]=(Point){x-,y-,,};
a[++n]=(Point){x-,w,-,};
a[++n]=(Point){z,y-,-,};
a[++n]=(Point){z,w,,};
}
else
{
scanf("%d%d%d",&x,&y,&z);
a[++n]=(Point){x,y,z,};
}
}
solve(,n); for (int i=;i<=n;i++) if (a[i].type)
{
int Ans=;
for (int to=i+;i<to;i++) Ans+=ans[i]*a[i].v;
i--;
printf("%d\n",Ans);
}
return ;
}
这题面的s没有用,怎么题面也不改。。
cdq分治入门--BZOJ1176: [Balkan2007]Mokia的更多相关文章
- CDQ分治入门 + 例题 Arnooks's Defensive Line [Uva live 5871]
CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...
- bzoj1176: [Balkan2007]Mokia【cdq分治】
把询问搞成4个,cdq分治. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a;i <= b; i++) #d ...
- BZOJ1176 [Balkan2007]Mokia 【CDQ分治】
题目 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输入格式 ...
- cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序
/* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...
- [BZOJ1176][Balkan2007]Mokia cdq+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 1395[Submit][S ...
- COGS 577 蝗灾 [CDQ分治入门题]
题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...
- Bzoj1176 [Balkan2007]Mokia
Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2000 Solved: 890 Description 维护一个W*W的矩阵,初始值均为S.每次操作 ...
- bzoj千题计划144:bzoj1176: [Balkan2007]Mokia
http://www.lydsy.com/JudgeOnline/problem.php?id=1176 CDQ分治 #include<cstdio> #include<iostre ...
- cdq分治入门and持续学习orz
感觉cdq分治是一个很有趣的算法 能将很多需要套数据结构的题通过离线来做 目前的一些微小的理解 在一般情况下 就像求三维偏序xyz 就可以先对x排序 然后分治 1 cdq_x(L,M) ; 2 提取出 ...
随机推荐
- IE8下ajax兼容问题
function crossDomainAjax(url, successCallback) { // IE8 & 9 only Cross domain JSON GET request i ...
- AJPFX详解jsp的九大内置对象和四大作用域
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域) 客户端的请 ...
- 深入学习数据结构之bitmap(四)
Bitmap,今天我们来分析一下bitmap的实现原理以及它的使用场景. 一.使用场景: 1.对于大量数据(几千个数据的就不要在废话了),且无重复或者可以忽略重复的数字.为啥这里要强调无重复,因为在b ...
- Javascript数据结构之栈
作者原文:http://hawkzz.com/blog/blog/1515054561771 定义 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种先入后出的数据结构 ...
- lua使用lfs.dll库进行文件操作
在项目开发中,为了提高开发效率往往需要开发一些辅助工具.最近在公司用lua帮拓展了一个资源扫描的工具,这个工具的功能就是从原始demo下指定目标资源文件,对该文件进行读取并筛选过滤一遍然后拷贝到最终d ...
- R in action读书笔记(5)-第七章:基本统计分析
7.1描述性统计分析 > vars<-c("mpg","hp","wt") > head(mtcars[vars]) ...
- VBox虚拟机安装debian
决定在win7上装一个Linux虚拟机用作Linux开发学习,虽然win7下已经有了Cygwin,还是想在一个比较完整的环境下.前面装过Ubuntu发现界面太笨重了,考虑重新换一个,同时比较喜欢apt ...
- .net 操作xml --移除注释节点
/// <summary> /// xml字符串转xml文档 忽略注释信息 /// </summary> /// <param name="sXml" ...
- SQL——视图、事务、锁、存储过程
https://www.bilibili.com/video/av15496406/?p=57 https://blog.csdn.net/u013630349/article/details/750 ...
- proposal_layer.py层解读
proposal_layer层是利用训练好的rpn网络来生成region proposal供fast rcnn使用. proposal_layer整个处理过程:1.生成所有的anchor,对ancho ...