要求可以计算前面的操作对后面询问的贡献

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分治的更多相关文章

  1. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  2. BZOJ 2683 简单题 ——CDQ分治

    [题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...

  3. HDU5618 & CDQ分治

    Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...

  4. 初识CDQ分治

    [BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 200 ...

  5. HDU5322 Hope(DP + CDQ分治 + NTT)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...

  6. 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 ...

  7. BZOJ2683 简单题(CDQ分治)

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

  8. BNUOJ 51279[组队活动 Large](cdq分治+FFT)

    传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...

  9. 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1439  Solved: 648[Submit][Status][Discuss ...

  10. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

随机推荐

  1. 微信小程序(微信应用号)开发ide安装解决方法

    这两天整个技术圈都炸锅了,微信小程序(微信应用号)发布内测,首批200家收到邀请,但是没受邀请的同学,也不用担心,下面介绍一下解决方法. 首先需要下载ide,昨天只需要下载0.9版本的编辑器并替换文件 ...

  2. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  3. 列表组件抽象(2)-listViewBase说明

    这是我写的关于列表组件的第2篇博客.前面的相关文章有: 1. 列表组件抽象(1)-概述 listViewBase是列表组件所有文件中最核心的一个,它抽象了所有列表的公共逻辑,将来如果有必要添加其它公共 ...

  4. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. .Net语言 APP开发平台——Smobiler学习日志:快速实现手机上的图片上传功能

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...

  6. c#使用Split分割换行符 \r\n

    c# 使用Split分割 换行符,方法如下(其余方法有空再添加):   string str = "aa" + "\r\n" + "bb"; ...

  7. css全局格式化

    /*全局控制*/ body{margin:0;padding:0;font-size:14px;line-height:22px; height:auto; font-family:"微软雅 ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. JDBC 制作简单的登录验证

    两种方法: 一.直接拼接到SQL语句 public static void main(String[] args) throws Exception{ //输入账号密码 Scanner sc = ne ...

  10. IDEA 中生成 MyBatis 逆向工程实践

    IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator. MyBatis Generator的详细介绍 http:/ ...