第一道CDQ,抄了下helenkeller的代码,感觉和归并排序差不多。。。

因为左半边的修改肯定在右半边的询问之前,所以就不用管时间的限制了,可以直接x轴排序树状数组处理y轴。。。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int w,n;
const int maxn=;
inline int read()
{
int p=;char c=getchar();
while(c<''||c>'')c=getchar();
while(c>=''&&c<='')p=p*+c-'',c=getchar();
return p;
}
struct node
{
int x1,y1,x2,y2,op,k,num;
int ans;
}p[maxn],cc[maxn<<];
int c[];
bool cmp(const node&a,const node&b)
{
if(a.x1==b.x1)return a.op<b.op;
return a.x1<b.x1;
}
int tot=;
void add(int x,int y)
{
for(int i=x;i<=w;i+=(i&(-i)))
{
c[i]+=y;
}
}
int sum(int x)
{
int q=;
for(int i=x;i;i-=(i&(-i)))
{
q+=c[i];
}
return q;
}
void solve(int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>;int cnt=;
for(int i=l;i<=mid;i++)
{
if(p[i].op==)cc[cnt++]=p[i];
}
for(int i=mid+;i<=r;i++)
{
if(p[i].op==)
{
cc[cnt++]=p[i];
cc[cnt++]=p[i];
cc[cnt-].x1--;
cc[cnt-].x1=p[i].x2;
cc[cnt-].op=;
}
}
sort(cc,cc+cnt,cmp);
for(int i=;i<cnt;i++)
{
if(cc[i].op==)
{
add(cc[i].y1,cc[i].k);
}
else if(cc[i].op==)
{
p[cc[i].num].ans-=sum(cc[i].y2)-sum(cc[i].y1-);
}
else
{
p[cc[i].num].ans+=sum(cc[i].y2)-sum(cc[i].y1-);
}
}
for(int i=;i<cnt;i++)
{
if(cc[i].op==)
{
add(cc[i].y1,-cc[i].k);
}
}
solve(l,mid);
solve(mid+,r);
return ;
}
int main()
{
freopen("locust.in","r",stdin);
freopen("locust.out","w",stdout);
scanf("%d%d",&w,&n);
int flag,a,b,c,d;
for(int i=;i<=n;i++)
{
flag=read();
if(flag==)
{
a=read();b=read();c=read();
p[i].op=;
p[i].x1=a;
p[i].y1=b;
p[i].k=c;
}
else
{
a=read();b=read();c=read();d=read();
p[i].op=;
p[i].x1=min(a,c);p[i].x2=max(a,c);
p[i].y1=min(b,d);p[i].y2=max(b,d);
}
p[i].num=i;
}
solve(,n);
for(int i=;i<=n;i++)
{
if(p[i].op==)printf("%d\n",p[i].ans);
}
return ;
}

cogs 577 蝗灾 CDQ分治的更多相关文章

  1. COGS 577 蝗灾 [CDQ分治入门题]

    题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...

  2. COGS 577 蝗灾 线段树+CDQ分治

    第一次写cdq分治 感谢hhd&lty 这20亿对CP的指导(逃) 其实 就是 递归看左半部分对右半部分的贡献 (树状数组写挂了--临时改的线段树[大写的尴尬]) //By SiriusRen ...

  3. COGS 577 蝗灾

    传送门 时间限制:2 s 内存限制:128 MB DESCRIPTION C国国土辽阔,地大物博......但是最近却在闹蝗灾..... 我们可以把C国国土当成一个W×W的矩阵,你会收到一些诸如(X, ...

  4. COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]

    传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...

  5. cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序

    /* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...

  6. CDQ分治嵌套模板:多维偏序问题

    CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...

  7. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  8. BZOJ 2683 简单题 ——CDQ分治

    [题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...

  9. HDU5618 & CDQ分治

    Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...

随机推荐

  1. 1-学习前言&C语言概述

    [C语言]01-学习前言&C语言概述 参考自 http://www.cnblogs.com/mjios/archive/2013/03/12/2956508.html#label2 C语言是我 ...

  2. 推荐几个精致的web UI框架

    1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...

  3. Symantec Backup Exec 2012 Agent For Linux安装

    Backup Exec 2012 介绍 Backup Exec 2012 是一种为虚拟和物理环境提供保护的集成产品,能够简化备份和灾难恢复,并提供了无可匹敌的恢复功能.借助于强大的 Symantec ...

  4. Attempt to fetch logical page (...) in database 2 failed. It belongs to allocation unit xxxx not to xxx

    今天一个同事说在一个生产库执行某个存储过程,遇到了错误: Fatal error 605 occurred at jul 29 2014 我试着执行该存储过程,结果出现下面错误,每次执行该存储过程,得 ...

  5. [AlwaysOn Availability Groups]AlwaysOn健康诊断日志

    AlwaysOn健康诊断日志 为了监控primary可用副本的健康状况,SQL Server资源DLL使用SQL Server2012的过程sp_server_diagnostics. SQL Ser ...

  6. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

  7. vs配置boost库

    步骤: 1.在boost官网下载boost版本,以1.59.0为例. 2.解压,解压后可看到文件夹下有个bootstrap.bat文件. 注意: 如果有以下error: 'cl' 不是内部或外部命令, ...

  8. ipv4理论知识2-分类编址、ip分类、网络标识、主机标识、地址类、地址块

    分类编址 ipv4的体系结构中有分类编址和无分类编址(后续会介绍到),在分类编址时,ipv4地址分为A.B.C.D.E这5类.每类占用的IP比例和个数如下图: ipv4分类识别 计算机以二进制方式存储 ...

  9. WPF 3D 知识点大全以及实例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

  10. [转]NET Core中实现一个Token base的身份认证

    本文转自:http://www.cnblogs.com/Leo_wl/p/6077203.html 注:本文提到的代码示例下载地址> How to achieve a bearer token ...