最近很不对啊=w= 写程序全是bug啊

ans数组开小了竟然一直不知道,小数据没问题大数据拍不过,交上去RE

蛋疼半天

这个主要把每次询问拆成3个询问。

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
#define dout printf
using namespace std; const int Maxw=+,Maxm=+,Maxq=+;
typedef long long ll;
int S,W,tot,C[Maxw],ans[Maxm+Maxq*]; void Add(int x,const int&d){
for(;<x&&x<=W;x+=x&-x)C[x]+=d;
}
int Query(int x){
int ret=;
for(;<x&&x<=W;x-=x&-x)ret+=C[x];
return ret;
} const int Hmod=1e5+;
struct node{
bool tp;//0 for modify and 1 for query
int x,y,ans,id;
node(int x,int y,int tp,int ans,int id):tp(tp),x(x),y(y),ans(ans),id(id){}
node(){ans=;}
}da[Maxq*+Maxm],q[Maxq*+Maxm]; struct prob{
int s1,s2,s3,s4,t;
void init(int x1,int y1,int x2,int y2){
++tot,da[s1=tot]=node(x2,y2,,,tot);
if(x1==||y1==)s2=;
else ++tot,da[s2=tot]=node(x1-,y1-,,,tot);
if(x1==)s3=;
else ++tot,da[s3=tot]=node(x1-,y2,,,tot);
if(y1==)s4=;
else ++tot,da[s4=tot]=node(x2,y1-,,,tot);
t=(x2-x1+)*(y2-y1+);
}
int calc(){
return ans[s1]+ans[s2]-(ans[s3]+ans[s4])+t*S;
}
}pr[Maxq];int totpr=; inline bool cmp(const node&a,const node&b){
if(a.x!=b.x)return a.x<b.x;
return a.y<b.y;
}
void init(){
scanf("%d%d",&S,&W);
for(int x1,y1,x2,y2,d,opt;~scanf("%d",&opt)&&opt!=;){
if(opt==)scanf("%d%d%d",&x1,&y1,&d),++tot,da[tot]=node(x1,y1,,d,tot);
else scanf("%d%d%d%d",&x1,&y1,&x2,&y2),pr[++totpr].init(x1,y1,x2,y2);
}
} void CDQ(int l,int r){
if(l==r)return;
int mid=(l+r)>>;
CDQ(l,mid);
CDQ(mid+,r);
int i=l;
for(int j=mid+;j<=r;j++){
for(;i<=mid&&da[i].x<=da[j].x;i++)if(!da[i].tp)Add(da[i].y,da[i].ans);
if(da[j].tp)da[j].ans+=Query(da[j].y);
}
for(i--;i>=l;i--)if(!da[i].tp)Add(da[i].y,-da[i].ans);
merge(da+l,da+mid+,da+mid+,da+r+,q,cmp);
memcpy(da+l,q,sizeof(da[])*(r-l+));
}
int main(){
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout); init();
CDQ(,tot);
for(int i=;i<=tot;i++)ans[da[i].id]=da[i].ans;
for(int i=;i<=totpr;i++)printf("%d\n",pr[i].calc()); return ;
}

BZOJ1176: [Balkan2007]Mokia CDQ分治的更多相关文章

  1. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  2. BZOJ 1176[Balkan2007]Mokia(CDQ分治)

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3381  Solved: 1520[Submit][S ...

  3. [BZOJ1176][Balkan2007]Mokia cdq+树状数组

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1395[Submit][S ...

  4. BZOJ 1176: [Balkan2007]Mokia [CDQ分治]

    题意: 有一个n * n的棋盘,每个格子内有一个数,初始的时候全部为0.现在要求维护两种操作: 1)Add:将格子(x, y)内的数加上A. 2)Query:询问矩阵(x0, y0, x1, y1)内 ...

  5. BZOJ 1176 [Balkan2007]Mokia ——CDQ分治

    [题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...

  6. bzoj1176: [Balkan2007]Mokia cdq

    链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...

  7. bzoj1176: [Balkan2007]Mokia【cdq分治】

    把询问搞成4个,cdq分治. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a;i <= b; i++) #d ...

  8. BZOJ1176 [Balkan2007]Mokia 【CDQ分治】

    题目 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输入格式 ...

  9. [bzoj1176]Mokia[CDQ分治]

    啃了一天论文,发现CDQ分治的原理其实很简单,大概就是这样的一类分治:将左右区间按一定规律排序后分开处理,递归到底时直接计算答案,对于一个区间,按照第二关键字split成两个区间,先处理左区间,之后因 ...

随机推荐

  1. 24种设计模式--门面模式【Facade Pattern】

    大家都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的 ...

  2. /etc/fstab一些信息

    [root@shine shine]# vim /etc/fstab ## /etc/fstab# Created by anaconda on Thu May 9 13:29:35 2013## A ...

  3. codeblocks调试(转载)

    单步调试  1)设置断点  在需要设置断点处,右击左边行号,Add breakpoint,则出现一个红色的点(可以同时设置多个,前提是不能在debug的运行模式下). 2)调试运行 Debug-> ...

  4. js插件动态加载js、css解决方案

    最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的 ...

  5. Laravel框架——任务调度(cron)

    准备: 在服务的/var/spool/cron/root文件中添加代码 cd /var/spool/cron/root 添加以下代码 * * * * * phppath 项目路径/artisan sc ...

  6. iOS中默认样式修改-b

    项目中有大量的UITableView都需要显示sectionHeader.iOS中默认sessionHeader上的textLabel样式跟设计图不符. 按照我们之前的解决方案,是在每个UITable ...

  7. [译]36 Days of Web Testing(三)

    Day 14: Automate the tedious Why ? 有些时候,web测试还是蛮单调乏味的,在开始测试前,你可能要必须跳转到一个特定的表单页面,或则为了得到一个特定的页面(或配置),你 ...

  8. Flex时间操作

    小弟是Flex新手,最近一段时间领导要求使用Flex开发B/S的一些项目,需要用到时间上的一些操作.上网查询一番好多人都说不好操作,有的甚至非常麻烦.基于此,小弟整理了一些关于Flex时间操作的经验, ...

  9. [BZOJ 1106] [POI2007] 立方体大作战tet 【树状数组】

    题目链接:BZOJ - 1106 题目分析 从1到2n枚举每一个位置. 如果枚举到某一个数,这个数已经是第二次出现,那么就看它和第一次出现的位置之间有多少数还没有被匹配,有多少没有匹配的就要进行多少次 ...

  10. TCP三次握手和http过程

    pc浏览服务器网页此过程不包括域名查询,只描述TCP与http数据流的变化.一.pc与http服务器进行三次握手来建立连接.1.pc:seq=0 ack=0 syn=1 ack=0 发送给服务器建立同 ...