传送门

之前听别人说CDQ分治不难学,今天才知道果真如此。之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱……

cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区间的答案,每次把区间折半。对于本题来说时间复杂度T(N)=T(N/2)+O(NlogN)

T(N)=O(Nlog2N)

/**************************************************************
Problem: 2683
Language: C++
Result: Accepted
Time:6204 ms
Memory:35184 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 200005
struct Node {
int t, x, y, v, k;
inline bool operator < (const Node&r) const {
if(x == r.x && y == r.y) return t < r.t;
else if(x == r.x) return y < r.y;
else return x < r.x;
}
} q[MAXN << 2], nq[MAXN << 2];
int n, cnt, ans;
inline void GET(int &n) {
n = 0; char c;
do c = getchar(); while('0' > c || c > '9');
do n = n * 10 + c - '0', c = getchar(); while('0' <= c && c <= '9');
}
namespace BIT {
int t[MAXN << 2];
inline void Add(int x, int v) {
for(; x <= n; x += x&-x) t[x] += v;
}
inline int Query(int x, int s = 0) {
for(; x; x -= x&-x) s+=t[x];
return s;
}
}
void cdq(int l, int r) {
if(l >= r) return;
using namespace BIT;
int mid = (l + r) >> 1, lp = l, rp = mid+1;
for(int i = l; i <= r; ++ i)
if(q[i].t <= mid && q[i].k == 1) Add(q[i].y, q[i].v);
else if(q[i].t > mid && q[i].k == 2) q[i].v += Query(q[i].y);
for(int i = l; i <= r; ++ i) {
if(q[i].t <= mid && q[i].k == 1) Add(q[i].y, -q[i].v);
if(q[i].t <= mid) nq[lp ++] = q[i];
else nq[rp ++] = q[i];
}
for(int i = l; i <= r; ++ i) q[i] = nq[i];
cdq(l, mid); cdq(mid+1, r);
}
int main() {
scanf("%d", &n);
int op, x, y, a, b;
while(~scanf("%d", &op) && 3 != op) {
if(1 == op) {
GET(x); GET(y); GET(a);
q[++ cnt] = { cnt, x, y, a, 1 };
}
else {
GET(x); GET(y); GET(a); GET(b);
q[++ cnt] = { cnt, x-1, y-1, 0, 2 };
q[++ cnt] = { cnt, x-1, b, 0, 2 };
q[++ cnt] = { cnt, a, y-1, 0, 2 };
q[++ cnt] = { cnt, a, b, 0, 2 };
}
}
sort(q+1, q+cnt+1);
cdq(1, cnt);
for(int i = 1; i <= cnt; ++ i)
if(q[i].k == 2) {
ans = q[i].v - q[i+1].v - q[i+2].v + q[i+3].v;
printf("%d\n", ans); i += 3;
}
return 0;
}

BZOJ2683 简单题(CDQ分治)的更多相关文章

  1. bzoj2683简单题 cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1803  Solved: 731[Submit][Status][Discuss] ...

  2. BZOJ2683: 简单题(cdq分治 树状数组)

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2142  Solved: 874[Submit][Status][Discuss] Descripti ...

  3. Bzoj2683 简单题 [CDQ分治]

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  4. 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治

    [BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...

  5. 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组

    bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...

  6. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  7. bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...

  8. BZOJ 2683: 简单题 [CDQ分治]

    同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...

  9. BZOJ 2683 简单题 cdq分治+树状数组

    题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...

  10. BZOJ 2683: 简单题(CDQ 分治)

    题面 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...

随机推荐

  1. CC1310之使用SMARTRF STUDIO

    SMARTRF STUDIO是TI提供的射频测试软件,在调射频的时候非常非常非常好用,推荐每一个使用TI射频芯片的工程师都要掌握. 1 如何使用? 要使用SMARTRF STUDIO,硬件必须连接仿真 ...

  2. TCP数据包的封包和拆包

    //该段博文为引用,非原创. 封包和拆包 作者:fengge8ylf  博客:http://blog.csdn.net/fengge8ylf 对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就 ...

  3. iOS开发中打电话发短信等功能的实现

    在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...

  4. 编辑器Ultraedit快捷键

    编辑器Ultraedit快捷键说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开源.免费的,而UE则需要注册.UE是Windows ...

  5. 在Spring MVC项目中,注解方式使用 .properties 文件及 UTF-8编码问题

    xml配置 <!-- 配置文件 --> <bean id="configProperties" class="org.springframework.b ...

  6. Struts 2学习笔记——拦截器相关

    一.添加国际化支持 默认的struts-deault.xml文件中已经定义了国际化拦截器,内容如下 <!-定义国际化拦截器--> <interceptor name="i1 ...

  7. cannot find module 'xml2js'

    运行nodejs网站报类似错误,缺少相应的报 在NodeJs安装目录,运行Node.js command prompt ,跳转到网站所在目录,运行npm install xml2js,安装缺少的模块, ...

  8. gulp插件gulp-ruby-sass和livereload插件

    gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装l ...

  9. [python]自动化将markdown文件转成html文件

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  10. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...