cdq分治——bzoj2683简单题
https://www.lydsy.com/JudgeOnline/problem.php?id=2683
知识点:1.以操作的顺序进行分治
2.cdq分治维护矩阵
3.计算比mid小的给比mid大的的贡献
4.容斥原理
code:
#include <bits/stdc++.h>
#define inf 1000000002
#define ll long long
using namespace std;
int s,w,m;
int ans[];
int t[];
struct que
{
int x,y;
int val,pos;
int id,opt;
}q[],tmp[];
bool operator < (que a,que b)
{
if(a.x == b.x && a.y == b.y)return a.opt < b.opt;
if(a.x == b.x)return a.y < b.y;
return a.x < b.x;
}
void addquery()
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int pos = ++ans[];
q[++m].pos = pos;q[m].id = m;q[m].x = x1 - ;q[m].y=y1 - ;q[m].val = ;q[m].opt = ;
q[++m].pos = pos;q[m].id = m;q[m].x = x2;q[m].y = y2;q[m].val = ;q[m].opt = ;
q[++m].pos = pos;q[m].id = m;q[m].x = x1 - ;q[m].y = y2;q[m].val = -;q[m].opt = ;
q[++m].pos = pos;q[m].id = m;q[m].x = x2;q[m].y = y1 - ;q[m].val = -;q[m].opt = ;
}
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int val)
{
for(int i=x;i<=w;i+=i&-i)t[i]+=val;
}
int query(int x)
{
int tmp = ;
for(int i = x;i;i -= lowbit(i))tmp += t[i];
return tmp;
}
void cdq(int l,int r)
{
if(l == r)return;
int mid = (l + r) >> ,l1 = l,l2 = mid + ;
for(int i = l;i <= r;i++)
{
if(q[i].id <= mid&&!q[i].opt)add(q[i].y,q[i].val);
if(q[i].id > mid && q[i].opt)ans[q[i].pos] += q[i].val * query(q[i].y);
}
for(int i = l;i <= r;i++)
if(q[i].id <= mid && !q[i].opt)add(q[i].y,-q[i].val);
for(int i = l;i <= r;i++)
if(q[i].id <= mid)tmp[l1++] = q[i];
else tmp[l2++] = q[i];
for(int i = l;i <= r;i++)
q[i] = tmp[i];
cdq(l,mid);cdq(mid + ,r);
}
int main()
{
scanf("%d%d",&s,&w);
while()
{
int opt;
scanf("%d",&opt);
if(opt == )
{
m++;
scanf("%d%d%d",&q[m].x,&q[m].y,&q[m].val);
q[m].id = m;
}
else if(opt == )
addquery();
else break;
}
sort(q + ,q + m + );
cdq(,m);
for(int i = ;i <= ans[];i++)
printf("%d\n",ans[i]);
return ;
}
cdq分治——bzoj2683简单题的更多相关文章
- [BZOJ2683]简单题/[BZOJ1176][BalkanOI2007]Mokia
[BZOJ2683]简单题 题目大意: 一个\(n\times n(n\le5\times10^5)\)的矩阵,初始时每个格子里的数全为\(0\).\(m(m\le2\times10^5)\)次操作, ...
- bzoj2683简单题 cdq分治
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1803 Solved: 731[Submit][Status][Discuss] ...
- BZOJ2683: 简单题(cdq分治 树状数组)
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2142 Solved: 874[Submit][Status][Discuss] Descripti ...
- BZOJ2683 简单题(CDQ分治)
传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...
- Bzoj2683 简单题 [CDQ分治]
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- bzoj2683简单题
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- 【对询问分块】【主席树】bzoj2683 简单题
对操作序列分块,每S次暴力重建主席树. 当S=sqrt(n*log(n))时,复杂度为O(m*sqrt(n*log(n))). 在线的. #include<cstdio> #include ...
- BZOJ 2683: 简单题(CDQ分治 + 树状数组)
BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...
随机推荐
- Web测试转App测试不看不知道
Web测试 Web通常指的是互联网应用系统,比如税务电子化征管档案系统.金融数据平台.餐饮商家管理后台等等,其实质是C/S的程序. C是Client--客户端,S是Server--服务器. Web中的 ...
- label smoothing
- 【LeetCode/LintCode】 题解丨微软面试题:大楼轮廓
水平面上有 N 座大楼,每座大楼都是矩阵的形状,可以用一个三元组表示 (start, end, height),分别代表其在x轴上的起点,终点和高度.大楼之间从远处看可能会重叠,求出 N 座大楼的外轮 ...
- Markdown基本语法及生成目录结构的方法
Markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式. 一.标题 在想要设置为标题的文字前面加#来表示一个#是一级标题,二个#是二级标题,以此类推.支持六 ...
- 制作 macOS Sierra U盘USB启动安装盘方法教程 (亲测)
备注:相关镜像到apple官网下载 https://discussionschinese.apple.com/thread/250596904 进去点击"请使用这个 App Store 链接 ...
- C#LeetCode刷题之#744-寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4001 访问. 给定一个只包含小写字母的有序数组letters 和 ...
- C#LeetCode刷题之#605-种花问题( Can Place Flowers)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3724 访问. 假设你有一个很长的花坛,一部分地块种植了花,另一部 ...
- 9个常用ES6特性归纳(一般用这些就够了)
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...
- 45道Promise面试题
来看看通过阅读本篇文章要点: Promise的几道基础题 Promise结合setTimeout Promise中的then.catch.finally Promise中的all和race async ...
- day4 列表 字典 元组
元组 不能修改里面的数据 字典是无序的集合 通过键名来访问元素 列表是有有序的 通过下标来访问 可以进行修改 列表 [] 是python中使用 ...