CDQ分治
要求可以计算前面的操作对后面询问的贡献
BZOJ1176
#include <cstdio>
#include <algorithm>
using namespace std; int tr[],p,ans[],s,q,opt,n,que; struct data1{
int po,x,y,num,v,opt;
}a[],tmp[]; struct data{
int num,po;
}yt[]; int mycomp(const data&a,const data&b){
return(a.num<b.num);
} int lowbit(int po){
return(po&(-po));
} int query(int po){
int ret=;
for (;po;po-=lowbit(po)) ret+=tr[po];
return(ret);
} void add(int po,int num){
for (;po<=p;po+=lowbit(po)) tr[po]+=num;
} void solve(int l,int r){
if (l==r) return;
int mid=(l+r)>>;
solve(l,mid);solve(mid+,r);
int po=l;
for (int i=mid+;i<=r;i++)
if (a[i].opt==){
while (po<=mid&&a[po].x<=a[i].x){
if (a[po].opt==) add(a[po].y,a[po].num);
po++;
}
ans[a[i].po]+=query(a[i].y)*a[i].v;
}
for (int i=l;i<po;i++)
if (a[i].opt==) add(a[i].y,-a[i].num); int po1=l,po2=mid+,po3=l;
while (po1<=mid&&po2<=r){
if (a[po1].x<a[po2].x) tmp[po3++]=a[po1++];else tmp[po3++]=a[po2++];
}
while (po1<=mid) tmp[po3++]=a[po1++];
while (po2<=r) tmp[po3++]=a[po2++];
for (int i=l;i<=r;i++) a[i]=tmp[i];
} int main(){
scanf("%d%d",&s,&q);
while (scanf("%d",&opt),opt!=){
if (opt==){
n++;
a[n].opt=;
scanf("%d%d%d",&a[n].x,&yt[n].num,&a[n].num);
yt[n].po=n;
}else{
int t1,t2,t3,t4;
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
que++;
a[++n].po=que;a[n].v=;a[n].x=t3;yt[n].num=t4;yt[n].po=n;a[n].opt=;
a[++n].po=que;a[n].v=-;a[n].x=t1-;yt[n].num=t4;yt[n].po=n;a[n].opt=;
a[++n].po=que;a[n].v=-;a[n].x=t3;yt[n].num=t2-;yt[n].po=n;a[n].opt=;
a[++n].po=que;a[n].v=;a[n].x=t1-;yt[n].num=t2-;yt[n].po=n;a[n].opt=;
}
} sort(yt+,yt+n+,mycomp);
yt[].num=-1e9;
p=;
for (int i=;i<=n;i++){
if (yt[i].num!=yt[i-].num) p++;
a[yt[i].po].y=p;
} solve(,n); for (int i=;i<=que;i++) printf("%d\n",ans[i]);
}
CDQ分治的更多相关文章
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- BZOJ 2683 简单题 ——CDQ分治
[题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...
- HDU5618 & CDQ分治
Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...
- 初识CDQ分治
[BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 200 ...
- HDU5322 Hope(DP + CDQ分治 + NTT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...
- BZOJ4170 极光(CDQ分治 或 树套树)
传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...
- BZOJ2683 简单题(CDQ分治)
传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...
- BNUOJ 51279[组队活动 Large](cdq分治+FFT)
传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1439 Solved: 648[Submit][Status][Discuss ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
随机推荐
- 微信小程序-阅读小程序demo
今天和朋友聊天说到小程序,然后看在看书,然后我们就弄了个小读书的demo,然后现在分享一下. 一.先来上图: 二.然后下面是详细的说明 首先先说下边的tabBar,项目采用json格式的数据配置,不 ...
- Linq查询基本操作
摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...
- C# 高效编程笔记2
C# 高效编程笔记2 1.理解GetHashCode()的陷阱 (1)作用:作为基于散列集合定义键的散列值,如:HashSet<T>,Dictionary<K,V>容器等 (2 ...
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- iOS 10 开发适配系列 之 权限Crash问题
升级 iOS 10 之后目测坑还是挺多的,记录一下吧,看看到时候会不会成为一个系列. 直入正题吧 今天用一个项目小小练下手,发现调用相机,崩了.试试看调用相册,又特么崩了.然后看到控制台输出了以下信息 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- js生成和下载二维码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- MTU(Maximum transmission unit) 最大传输单元
最大传输单元(Maximum transmission unit),以太网MTU为1500. 不同网络MTU如下: 如果最大报文数据大小(MSS)超过MTU,则会引起分片操作. 路径MTU: 网路 ...
- 在Ubuntu Server 14.04中搭建FTP服务器(VMWare)
自己搭建ftp服务器,方便主机与虚拟机中的Ubuntu传输文件. 选用的ftp软件为vsftpd. 1.命令行: sudo apt-get install vsftpd 2.安装完配置: vsftpd ...