Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 2142  Solved: 874
[Submit][Status][Discuss]

Description

你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:

命令

参数限制

内容

1 x y A

1<=x,y<=N,A是正整数

将格子x,y里的数字加上A

2 x1 y1 x2 y2

1<=x1<= x2<=N

1<=y1<= y2<=N

输出x1 y1 x2 y2这个矩形内的数字和

3

终止程序

Input

输入文件第一行一个正整数N。
接下来每行一个操作。
 

Output

对于每个2操作,输出一个对应的答案。
 

Sample Input

4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

Sample Output

3
5

HINT

1<=N<=500000,操作数不超过200000个,内存限制20M。
对于100%的数据,操作1中的A不超过2000。

Source

cdq分治裸题。

首先我们对询问点拆为$4$个前缀和查询

再把所有的询问/修改离线,按照$x$轴排序

直接上cdq分治,用树状数组为护$y$轴的贡献

归并排序版太难写了直接上sort

#include<cstdio>
#include<algorithm>
#define lowbit(x) ((x) & (-x))
using namespace std;
const int MAXN = * 1e5 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, Qnum;
struct Query {
int opt, x, y, v, ans, xxx;
bool operator < (const Query &rhs) const {
return x == rhs.x ? y < rhs.y : x < rhs.x;
}
}Q[MAXN], Tp[MAXN];
int T[MAXN];
void Add(int pos, int val) {
for(int i = pos; i <= N; i += lowbit(i)) T[i] += val;
}
int Sum(int pos) {
int ans = ;
for(int i = pos; i; i -= lowbit(i)) ans += T[i];
return ans;
}
int num = , out[MAXN];
void CDQ(int l, int r) {
if(l == r) return ;
int mid = l + r >> ;
CDQ(l, mid);
CDQ(mid + , r);
int i = l, j = mid + , p = l, last = ;
sort(Q + l, Q + mid + );
sort(Q + mid + , Q + r + );
while(j <= r) {
while(Q[i].opt == && i <= mid) i++;
while(Q[j].opt == && j <= r) j++;
if(i <= mid && Q[i].x <= Q[j].x) Add(Q[i].y, Q[i].v), last = i++;
else if(j <= r) Q[j].ans += Sum(Q[j].y), j++;
}
for(int i = l; i <= last; i++)
if(Q[i].opt == )
Add(Q[i].y, -Q[i].v); }
int main() {
N = read();
for(;;) {
int op = read();
if(op == ) break;
if(op == ) {Q[++num].opt = op; Q[num].x = read(), Q[num].y = read(), Q[num].v = read();}
else {
int xx1 = read(), yy1 = read(), xx2 = read(), yy2 = read();
Qnum++;
Q[++num] = (Query) {op, xx2, yy2, , , Qnum};
Q[++num] = (Query) {op, xx1 - , yy1 - , , , Qnum};
Q[++num] = (Query) {op, xx1 - , yy2, , , Qnum};
Q[++num] = (Query) {op, xx2, yy1 - , , , Qnum};
}
}
CDQ(, num);
for(int i = ; i <= num; i++) {
if(Q[i].opt == ) {
if(Q[i].v == || Q[i].v == ) out[Q[i].xxx] += Q[i].ans;
else out[Q[i].xxx] -= Q[i].ans;
}
}
for(int i = ; i <= Qnum; i++)
printf("%d\n", out[i]);
return ;
}

BZOJ2683: 简单题(cdq分治 树状数组)的更多相关文章

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

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

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

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

  3. BZOJ 1176 Mokia CDQ分治+树状数组

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

  4. 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组

    [BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...

  5. 【bzoj3262】陌上花开 CDQ分治+树状数组

    题目描述 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa&g ...

  6. 【bzoj2225】[Spoj 2371]Another Longest Increasing CDQ分治+树状数组

    题目描述 给定N个数对(xi, yi),求最长上升子序列的长度.上升序列定义为{(xi, yi)}满足对i<j有xi<xj且yi<yj. 样例输入 8 1 3 3 2 1 1 4 5 ...

  7. LOJ3146 APIO2019路灯(cdq分治+树状数组)

    每个时刻都形成若干段满足段内任意两点可达.将其视为若干正方形.则查询相当于求历史上某点被正方形包含的时刻数量.并且注意到每个时刻只有O(1)个正方形出现或消失,那么求出每个矩形的出现时间和消失时间,就 ...

  8. BZOJ 4553 [Tjoi2016&Heoi2016]序列 ——CDQ分治 树状数组

    考虑答案的构成,发现是一个有限制条件的偏序问题. 然后三个维度的DP,可以排序.CDQ.树状数组各解决一维. #include <map> #include <cmath> # ...

  9. BZOJ 2683: 简单题(CDQ分治 + 树状数组)

    BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...

随机推荐

  1. (转)轻松应对IDC机房带宽突然暴涨问题

    原文:http://blog.51cto.com/oldboy/909696

  2. .NET平台下使用C#连接各种数据库

    在.NET平台下,通常我们需要连接不同的数据库,这就需要我们配置连接字符串以及提供常用的class进行数据存取. 1.C#连接Access @"Provider=Microsoft.ACE. ...

  3. 换晶振导致stm32串口数据飞码的解决办法

    一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串 ...

  4. 设置Tomcat的字符编码

    在 server.xml 中的 Connector 标签在加入 URIEncoding="UTF-8" 属性. <Connector port="8080" ...

  5. 在CentOS上配置tomcat服务

    # hapday start 2016-02-04 #!/bin/bash # description: Tomcat Start Stop Restart # processname: tomcat ...

  6. >>我要做特工系列 之 CSS 3_animation_向右滑出后下滑并停止

    新手入门还没有正式发点啥东西,都是在装潢博客这个家了,到现在为止还是没有装修好..熟悉了这边的发布规范之后会持续在这里记录,给自己留下学习的脚印~ 这正式的第一篇随笔写个使用css3的动画效果. 总感 ...

  7. canvas的globalAlphaAPI

    canvas的globalAlphaAPI

  8. AWS ELB Sticky Session有问题?别忘了AWSELB cookie

    我们的产品中有两个Module,分别部署在独立的Linux机器上,Module 1需要向Module 2发起Http请求来获得服务.由于Module 2有多台,因此我们会在Module 2前部署一台负 ...

  9. linux基础命令-mkdir/tree/rmdir

    命令行的展开 ~: 展开为用户的主目录 ~USERNAME: 展开为指定用户的主目录 {}:可承载一个以逗号分隔的列表,并将其展开为多个路径 [root@host01 tmp]# mkdir -vp ...

  10. JavaScript 数组排序(从大到小,从小到大)

    1.数组的从大到小排序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...