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\ ...
随机推荐
- JS 执行机制笔记
js同步和异步同步 前一个任务结束以后再执行下面一个任务,程序的执行顺序与任务的排列顺序是一致的 同步任务都在主线程上执行,形成一个执行线 异步 前一个任务没结束之前程序还可以执行别的任务 j ...
- Django 环境下常用的模型设计
Django 环境下常用的模型设计 用户表 继承 django.contrib.auth.model import AbstractUser AbstractUser 默认已经包含了很多字段了 id ...
- 制作的excel表格如何放到微信公众号文章中?
制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...
- C#LeetCode刷题-二分查找
二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...
- Mybatis-07-多对一和一对多处理
多对一处理 如, 多个学生,对应一个老师 多个学生关联一个老师(多对一) 一个老师有很多学生(一对多) SQL: create table `teacher`( `id` int(10) not nu ...
- go语言gRPC系列(三) - 使用grpc-gateway同时提供HTTP和gRPC服务
1. gRPC提供HTTP服务 1.1 存在的意义 1.2 代码示例 1.3 使用postman尝试调用 1.4 gRPC客户端代码调用 2. 使用grpc-gateway同时提供HTTP和gRPC服 ...
- 8.oracle 表查询
演示如何使用select语句,接下来对emp.dept.salgrade表结构进行解说. emp 雇员表 字段名称 数据类型 是否为空 备注 -------- ----------- -------- ...
- MYSQL语法(一)
数据表准备: CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(10 ...
- wsgi的environ变量
The environ dictionary is required to contain these CGI environment variables, as defined by the Com ...
- 如何加速github下载速度
第一步 魔法 第二步 git config --global http.proxy http://127.0.0.1:1080 git config --global https.proxy http ...