cogs 577 蝗灾 CDQ分治
第一道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分治的更多相关文章
- COGS 577 蝗灾 [CDQ分治入门题]
题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...
- COGS 577 蝗灾 线段树+CDQ分治
第一次写cdq分治 感谢hhd<y 这20亿对CP的指导(逃) 其实 就是 递归看左半部分对右半部分的贡献 (树状数组写挂了--临时改的线段树[大写的尴尬]) //By SiriusRen ...
- COGS 577 蝗灾
传送门 时间限制:2 s 内存限制:128 MB DESCRIPTION C国国土辽阔,地大物博......但是最近却在闹蝗灾..... 我们可以把C国国土当成一个W×W的矩阵,你会收到一些诸如(X, ...
- COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]
传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...
- cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序
/* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...
- CDQ分治嵌套模板:多维偏序问题
CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- BZOJ 2683 简单题 ——CDQ分治
[题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...
- HDU5618 & CDQ分治
Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...
随机推荐
- EventBus3.0源码解析
本文主要介绍EventBus3.0的源码 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递. EventBus使用简单,并将事件发布和订阅充 ...
- IIS7如何部署asp.net网站
第一步:发布网站 右键asp.net web项目,选择发布, 然后新建配置文件名称并选择 "文件系统" 发布方法. 目标位置选择本地新建的文件夹如: IISWebSite 第二 ...
- CentOS 6.6安装Xtrabackup RPM提示缺少libev.so.4()
在CentOS Release 6.6安装percona-xtrabackup-2.3.4时,遇到下面错误信息 rpm -ivh percona-xtrabackup-2.3.4-1.el6.x86_ ...
- TNS-12540: TNS:internal limit restriction exceeded
应用程序以及客户端工具(Toad.PL/SQL Developer等)出现突然连接不上数据库服务器的情况,监听日志listener.log里面出现了TSN-12518与TSN-12540错误,如下所示 ...
- Linux命令学习总结:shutdown
命令简介: 该命令可以安全关闭或者重新启动系统.你没有看错,shutdown命令不仅可以关闭系统.也可以重启Linux系统. 命令语法: /sbin/shutdown [-t sec] [-ark ...
- 【转】最牛B的编码套路
最近,我大量阅读了Steve Yegge的文章.其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反,单纯地每天埋头于工 ...
- C++基础——模拟事务 (2)Composite模式
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- PHP笔记(HTML篇)
学过很多语言,最近终于决定要学PHP了. 学习PHP,首先总要学习HTML,那么,我也从HTML开始吧! 首先学习任何编程语言,看再多书,都离不开它——帮助文档 HTML帮助文档:http://pan ...
- Linux下通配符总结
* - 通配符,代表任意字符(0到多个)? - 通配符,代表一个字符# - 注释/ - 跳转符号,将特殊字符或通配符还原成一般符号| - 分隔两个管线命令的界定; - 连续性命令的界定~ - 用户的根 ...
- android 生成验证码图片
(转自:http://blog.csdn.net/onlyonecoder/article/details/8231373) package com.nobeg.util; import java.u ...