BZOJ 2683 简单题 cdq分治+树状数组
题意:链接
**方法:**cdq分治+树状数组
解析:
首先对于这道题,看了范围之后。二维的数据结构是显然不能过的。于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好的体现它的作用。
首先,对于每个询问求和,显然是x在它左边的而且出现时间在它之前的全部的change对他可能会有影响。
我们依照x第一关键字,y第二关键字,操作第三关键字来排序全部的询问。然后在cdq的时候,每次递归处理左半区间,依照x动态的将y这一列的值加到树状数组里。来更新右半边的全部询问,注意这里的树状数组是须要清的,也就是每次cdq都是採用不同的树状数组。
另:这题神坑。数组开小不是RE而是WA
数组范围是要开到200000*4的,由于对于每个1操作。是一个操作,而2操作依据容斥原理,是4个操作。
所以复杂度大概是多少呢O(nlog^2(n))cdq+树状数组。n<=800000
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 800010
#define Q q[tot]
using namespace std;
struct node
{
int opt,x,y,A,no,belong;
}q[N],nq[N];
int n;
int jd,tot,T;
int ans[N];
int c[N];
int lowbit(int x){return x&(-x);}
int getsum(int x){int ret=0;while(x){ret+=c[x],x-=lowbit(x);}return ret;}
void update(int x,int v){while(x<=n){c[x]+=v;x+=lowbit(x);}}
int cmp(node a,node 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 sov(int l,int r)
{
if(l==r)return;
int mid=(l+r)>>1,l1=l,l2=mid+1;
for(int i=l;i<=r;i++)
{
if(q[i].no<=mid&&q[i].opt==1)update(q[i].y,q[i].A);
if(q[i].no>mid&&q[i].opt==2)ans[q[i].belong]+=getsum(q[i].y);
}
for(int i=l;i<=r;i++)
{
if(q[i].no<=mid&&q[i].opt==1)update(q[i].y,-q[i].A);
}
l1=l,l2=mid+1;
for(int i=l;i<=r;i++){if(q[i].no<=mid)nq[l1++]=q[i];else nq[l2++]=q[i];}
for(int i=l;i<=r;i++)q[i]=nq[i];
sov(l,mid),sov(mid+1,r);
}
int main()
{
scanf("%d",&n);
while(scanf("%d",&jd)&&jd^3)
{
if(jd==1){int x,y,a;scanf("%d%d%d",&x,&y,&a);q[++tot].opt=1,Q.x=x,Q.y=y,Q.A=a,Q.no=tot;}
else
{
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
q[++tot].opt=2,Q.x=x1-1,Q.y=y1-1,Q.A=1,Q.no=tot,Q.belong=++T;
q[++tot].opt=2,Q.x=x1-1,Q.y=y2,Q.A=-1,Q.no=tot,Q.belong=T;
q[++tot].opt=2,Q.x=x2,Q.y=y1-1,Q.A=-1,Q.no=tot,Q.belong=T;
q[++tot].opt=2,Q.x=x2,Q.y=y2,Q.A=1,Q.no=tot,Q.belong=T;
}
}
sort(q+1,q+1+tot,cmp);
sov(1,tot);
for(int i=1;i<=T;i++)printf("%d\n",ans[i]);
}
BZOJ 2683 简单题 cdq分治+树状数组的更多相关文章
- BZOJ2683: 简单题(cdq分治 树状数组)
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2142 Solved: 874[Submit][Status][Discuss] Descripti ...
- 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组
bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...
- BZOJ 2683: 简单题(CDQ 分治)
题面 Time Limit: 50 Sec Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...
- BZOJ 2683 简单题 ——CDQ分治
[题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...
- BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...
- BZOJ 2683: 简单题 [CDQ分治]
同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...
- BZOJ 1176 Mokia CDQ分治+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组
[BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...
- 【bzoj3262】陌上花开 CDQ分治+树状数组
题目描述 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa&g ...
随机推荐
- Python破解Wifi密码思路
一.前言说明 本机运行环境:系统环境Win10,运行环境Python3.6,运行工具Pycharm 需要Python的包有:pywifi 这是一种暴力破解wifi的模式,需要的时间比较长,本文主要提供 ...
- 基于bootstrap的分页组件-Bootstrap Paginator
效果
- Linux学习总结(15)——提高 Vim 和 Shell 效率的 9 个建议
你上一次使用 CAPSLOCK 键是什么时候?很久没有了对不对?噢,我也是,它已经被遗忘了,它浪费了键盘上一个黄金位置.让我们把它重映射成 Control 键来发挥它的作用吧!这里告诉了你在不同的操作 ...
- ORACLE-014:oracle中查看DBLinkpassword
dblink在数据库中使用是比較多的,简单方便.只是随着oracle安全机制的加强.普通用户登录仅仅能看到,username以及连接字符串.那么dblinkpassword怎样查看呢? 非常easy. ...
- java去除反复的字符串和移除不想要的字符串
在java开发中碰到了有些字符串是反复的,假设在进行业务处理要所有遍历太对的数据就会反复,所以在进行业务处理前进行一个去重操作. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- 零基础学HTML 5实战开发(第一季)
開始学习html5了.趋势不得不学习啊,之前老毛说过落后就要挨打,如今是不学习就要被市场淘汰,被社会淘汰.喜欢挑战,喜欢冒险.来吧.csdn给我们提供了那么好的平台.用起来..零基础学HTML 5的实 ...
- oracle 11g sql developer安装后无法使用
oracle11g安装后出现 再去官网单独下来个sql developer安装 sql developer须要jre支持
- HTML打开摄像头,进行拍照上传
html代码 <%@ page language="java" contentType="text/html; charset=utf-8" pageEn ...
- zzulioj--1791-- 旋转矩阵(模拟水题)
旋转矩阵 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 268 Solved: 116 SubmitStatusWeb Board Descr ...
- 在CentOS下安装tomcat并配置环境变量(改默认端口8080为8081)
不多说,直接上干货! 第一步:下载tomcat压缩包 http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.73/bin/ 第二步:上传tomcat压 ...