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简单题的更多相关文章

  1. [BZOJ2683]简单题/[BZOJ1176][BalkanOI2007]Mokia

    [BZOJ2683]简单题 题目大意: 一个\(n\times n(n\le5\times10^5)\)的矩阵,初始时每个格子里的数全为\(0\).\(m(m\le2\times10^5)\)次操作, ...

  2. bzoj2683简单题 cdq分治

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

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

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

  4. BZOJ2683 简单题(CDQ分治)

    传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...

  5. Bzoj2683 简单题 [CDQ分治]

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

  6. bzoj2683简单题

    #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> ...

  7. Bzoj2683 简单题

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

  8. 【对询问分块】【主席树】bzoj2683 简单题

    对操作序列分块,每S次暴力重建主席树. 当S=sqrt(n*log(n))时,复杂度为O(m*sqrt(n*log(n))). 在线的. #include<cstdio> #include ...

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

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

随机推荐

  1. JVM系列之:再谈java中的safepoint

    目录 safepoint是什么 safepoint的例子 线程什么时候会进入safepoint safepoint是怎么工作的 总结 safepoint是什么 java程序里面有很多很多的java线程 ...

  2. Good-turning估计

    在学习NLP过程中,遇到了Good-turning的介绍,网上找了相关的资料查看,总结如下. 思想: 其主要思想是从概率的总量中分配少量的比例给零概率项. 思路: 假定给定的语料库中出现 \(r\)次 ...

  3. C#-Func<>

    与C#-Action十分相似, Func<> 也是c#内置的委托类型,不同的是, Func<> 只能用来引用具有返回值的方法,也就是说,在使用它时,至少需要在尖括号内指定一种类 ...

  4. 2020-04-14:mysql原子性和持久性怎么保证

    1.Mysql怎么保证一致性的? OK,这个问题分为两个层面来说. 从数据库层面,数据库通过原子性.隔离性.持久性来保证一致性.也就是说ACID四大特性之中,C(一致性)是目的,A(原子性).I(隔离 ...

  5. C#LeetCode刷题之#11-盛最多水的容器(Container With Most Water)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3615 访问. 给定 n 个非负整数 a1,a2,...,an,每 ...

  6. C#LeetCode刷题之#541-反转字符串 II(Reverse String II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3951 访问. 给定一个字符串和一个整数 k,你需要对从字符串开头 ...

  7. C#LeetCode刷题之#234-回文链表(Palindrome Linked List)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3905 访问. 请判断一个链表是否为回文链表. 输入: 1-> ...

  8. windows安装cnpm步骤

    1.首先前往nodejs官网下载nodejs 2.安装nodejs 3.打开cmd,输入npm -v,检查npm是否安装成功.成功返回的话返回输出版本号 4.安装cnpm,输入npm install ...

  9. Vue中 props 这些知识点

    如果你一直在阅读有关"props"内容,你会发现我们可能也一直在使用它们(即使没有意识到),但也许你并不完全确定它们是什么.或者如何正确使用它们,并充分利用它们. 当你读完这篇指南 ...

  10. TfidfVectorizer、CountVectorizer 和 TfidfTransformer 的简单教程

    TfidfVectorizer.CountVectorizer 和 TfidfTransformer 是 sklearn 中处理自然语言常用的工具.TfidfVectorizer 相当于 CountV ...