第一次写cdq分治 感谢hhd&lty 这20亿对CP的指导(逃)

其实 就是 递归看左半部分对右半部分的贡献

(树状数组写挂了……临时改的线段树【大写的尴尬】)

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 666666
int w,n,tree[N*16];
struct Oper{int op,id,x1,y1,x2,y2,z,ans;}a[N],b[N];
bool cmp(Oper a,Oper b){return a.x1<b.x1||(a.x1==b.x1&&a.op<b.op);}
void add(int l,int r,int pos,int num,int wei){
if(l==r){tree[pos]+=wei;return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid<num)add(mid+1,r,rson,num,wei);
else add(l,mid,lson,num,wei);
tree[pos]=tree[lson]+tree[rson];
}
int query(int l,int r,int pos,int num){
if(num>=r)return tree[pos];
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid>=num)return query(l,mid,lson,num);
else return query(l,mid,lson,num)+query(mid+1,r,rson,num);
}
void cdq(int l,int r){
if(l==r)return;
int mid=(l+r)>>1,cnt=0;
cdq(l,mid),cdq(mid+1,r);
for(int i=l;i<=mid;i++)if(a[i].op==1)b[cnt++]=a[i];
for(int i=mid+1;i<=r;i++)if(a[i].op==2){
b[cnt]=a[i],b[cnt++].x1--;
b[cnt]=a[i],b[cnt].x1=a[i].x2;b[cnt++].op=3;
}
sort(b,b+cnt,cmp);
for(int i=0;i<cnt;i++)
if(b[i].op==1)add(0,w,1,b[i].y1,b[i].z);
else a[b[i].id].ans+=((b[i].op == 2)?-1:1)*(query(0,w,1,b[i].y2)-query(0,w,1,b[i].y1-1));
for(int i=0;i<cnt;i++)if(b[i].op==1)add(0,w,1,b[i].y1,-b[i].z);
}
int main(){
freopen("locust.in","r",stdin);
freopen("locust.out","w",stdout);
scanf("%d%d",&w,&n);
for(int i=1;i<=n;a[i].id=i,i++){
scanf("%d%d%d",&a[i].op,&a[i].x1,&a[i].y1);
if(a[i].op==1)scanf("%d",&a[i].z);
else scanf("%d%d",&a[i].x2,&a[i].y2);
}cdq(1,n);
for(int i=1;i<=n;i++)if(a[i].op==2)printf("%d\n",a[i].ans);
}

COGS 577 蝗灾 线段树+CDQ分治的更多相关文章

  1. BZOJ 4025: 二分图 [线段树CDQ分治 并查集]

    4025: 二分图 题意:加入边,删除边,查询当前图是否为二分图 本来想练lct,然后发现了线段树分治的做法,感觉好厉害. lct做法的核心就是维护删除时间的最大生成树 首先口胡一个分块做法,和hno ...

  2. BZOJ 3939 [Usaco2015 Feb]Cow Hopscotch ——线段树 CDQ分治

    显然dp[i][j]=ps[i-1][j-1]-sigma(dp[k<i][l<j],a[i][j]=a[k][l]) 考虑对于每一种颜色都开一颗区间线段树,但是空间不够. 所以我们可以动 ...

  3. 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护

    线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...

  4. COGS 577 蝗灾 [CDQ分治入门题]

    题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...

  5. 6.6 省选模拟赛 线段 二维数点问题 树套树 CDQ分治

    LINK:线段 还是太菜了 没看出这道题真正的模型 我真是一个典型的没脑子选手. 考虑如何查询答案. 每次在一个线段x的状态被更改后 可以发现有影响的是 和x相连那段极长连续1子段. 设这个子段左端点 ...

  6. COGS 577 蝗灾

    传送门 时间限制:2 s 内存限制:128 MB DESCRIPTION C国国土辽阔,地大物博......但是最近却在闹蝗灾..... 我们可以把C国国土当成一个W×W的矩阵,你会收到一些诸如(X, ...

  7. bzoj 3295 (洛谷3157、3193) [Cqoi2011]动态逆序对——树套树 / CDQ分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 题目--洛谷3157:https://www.luogu.org/problemnew ...

  8. Codechef-ANCESTOR(树套树/CDQ分治)

    题意: 给定两棵有根树,各有 N 个点.两棵树上的点分别被从 1 到 N 标号.两棵树的根均为标号为 1 的节点. 你的任务非常简单:对于每个 i,找到一个 j(j != i),使得在两棵树中 j 都 ...

  9. 【Bzoj 3295】 动态逆序对(树套树|CDQ分治)

    [题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状 ...

随机推荐

  1. oracle数据库回滚

    线下测试数据误操作,回滚攻略--把数据捞出来,这个时间自己设置--表名一定要是:xx_tbd日期 CREATE TABLE user_tbd0718ASselect * from user as of ...

  2. Linux Kernel 5.1 RC5发布

    我们距离正式的Linux 5.1内核发布还有不到一个月的时间,而今天Linus Torvalds宣布推出预期的Linux Kernel 5.1 RC5版本.Linus Torvalds专门评论了Lin ...

  3. WPF打字机效果

    public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); TypewriteTex ...

  4. 怎样在windows7上使用snmp命令

    原文地址:http://wenboxz.com/archives/window7-use-snmp-command.html/

  5. Jquery控件jrumble

    <!DOCTYPE HTML> <html>  <head>   <title>demo.html</title>   <meta h ...

  6. 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现

    首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...

  7. jsp布局中关于&lt;iframe&gt;标签的使用

    iframe 元素会创建包括另外一个文档的内联框架(即行内框架). 注意:在 HTML 4.1 Strict DTD 和 XHTML 1.0 Strict DTD 中,不支持 iframe 元素. & ...

  8. 34.angularJS的{{}}和ng-bind

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. <html> <head> <meta charset="utf ...

  9. EL表达式获取参数值${param.name}等

    转自:http://www.html580.com/study/83.html EL表达式获取参数值${param.name}等 (1).${pageContext} 获取到 pageContext ...

  10. WEB前端开发中的SEO注意点

    近几年来,SEO在国内得到了蓬勃的发展,其中很多的SEO技术越来越体现在web前端的一些细节上.要做好SEO,WEB前端这一块也要做必不可少的优化. 这就要求我们WEB前端工程师在开发页面的时候,要写 ...