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\ ...
随机推荐
- SpringBoot介绍,快速入门小例子,目录结构,不同的启动方式,SpringBoot常用注解
SpringBoot介绍 引言 为了使用ssm框架去开发,准备ssm框架的模板配置 为了Spring整合第三方框架,单独的去编写xml文件 导致ssm项目后期xml文件特别多,维护xml文件的成本也是 ...
- nvcc fatal : Path to libdevice library not specified
安装完成后,配置环境变量,在home下的.bashrc中加入 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export ...
- Python学习笔记之 Python设计思想&设计原则
Python设计思想&设计原则 设计思想 1.封装 数据角度 多种数据合为一种数据 优势:代码可读性高 将数据与行为相关联 例如:电脑(内存,储存空间,...) 行为角度 ...
- JavaScript - async/await 基础示例
一个函数如果被 async 修饰,无论内部是否有 await的异步操作,都会返回一个 Promise 对象 demo 1 async function basicAsync() { let resul ...
- POW共识机制原理及优缺点
PoW共识机制 POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明.常见的是利用HASH运算的复杂度进行CPU ...
- Python基础入门知识点——Python中的异常
前言 在先前的一些章节里你已经执行了一些代码,你一定遇到了程序“崩溃”或因未解决的错误而终止的情况.你会看到“跟踪记录(traceback)”消息以及随后解释器向你提供的信息,包括错误的名称.原因和发 ...
- 【CF1174D】 Ehab and the Expected XOR Problem - 构造
题面 Given two integers \(n\) and \(x\), construct an array that satisfies the following conditions: · ...
- python利用爬虫获取百度翻译,爱词霸翻译结果,制作翻译小工具
先看效果展示(仅作学习使用,非商业) 效果图是采用的 爱词霸 翻译,百度翻译 也实现了,只不过被注释了. 学计算机很多时候碰到生词,每次打开手机/浏览器翻译总觉得很麻烦,就想着自己写一个软件,自己去实 ...
- Centos7第一安装后无法联网
- centos7 编译安装 redis-6.0.5
安装redis sudo yum install redis centos自带的redis才3.2 太旧了所以使用源码编译 需要先安装gcc新版才能编译 centos7 默认的 gcc 版本为:4.8 ...