2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)
传送门
调了半天发现是输出优化打错了求心理阴影体积233
这题很简单啊。
一个修改操作x如果对一个询问操作y有贡献那么有。
tx<ty,Xx<=Xy,Yx<=Yy" role="presentation" style="position: relative;">tx<ty,Xx<=Xy,Yx<=Yytx<ty,Xx<=Xy,Yx<=Yy,其中t是时间,X,Y是坐标,这就是一个普通的三维偏序了。
代码:
#include<bits/stdc++.h>
#define N 650000
#define M 2000005
#define K 10005
using namespace std;
struct Pot{int x,y,z,t,id,f;}q[N+K],tmp[N+K];
int n,s,k,m,bit[M],ans[K];
inline int read(){
int ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans*w;
}
inline void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar((x%10)^48);
}
inline int lowbit(int x){return x&-x;}
inline void update(int x,int v){for(int i=x;i<=n;i+=lowbit(i))bit[i]+=v;}
inline int query(int x){int ret=0;for(int i=x;i;i-=lowbit(i))ret+=bit[i];return ret;}
inline void solve(int l,int r){
if(l==r)return;
int mid=l+r>>1,pos1=l,pos2=mid+1;
for(int i=l;i<=r;++i){
if(q[i].t<=mid&&!q[i].f)update(q[i].y,q[i].z);
if(q[i].t>mid&&q[i].f)ans[q[i].id]+=q[i].z*query(q[i].y);
}
for(int i=l;i<=r;++i)if(q[i].t<=mid&&!q[i].f)update(q[i].y,-q[i].z);
for(int i=l;i<=r;++i)
if(q[i].t<=mid)tmp[pos1++]=q[i];
else tmp[pos2++]=q[i];
for(int i=l;i<=r;++i)q[i]=tmp[i];
solve(l,mid),solve(mid+1,r);
}
inline bool cmp(Pot a,Pot b){return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.f<b.f);}
int main(){
s=read(),n=read();
int op;
while((op=read())!=3){
int x=read(),y=read(),z=read();
if(op==1)q[++k]=(Pot){x,y,z,k,m,0};
else{
int w=read();
++m,--x,--y;
q[++k]=(Pot){x,y,1,k,m,1};
q[++k]=(Pot){x,w,-1,k,m,1};
q[++k]=(Pot){z,y,-1,k,m,1};
q[++k]=(Pot){z,w,1,k,m,1};
}
}
sort(q+1,q+k+1,cmp),solve(1,k);
for(int i=1;i<=m;++i)write(ans[i]),puts("");
return 0;
}
2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)的更多相关文章
- BZOJ1176: [Balkan2007]Mokia CDQ分治
最近很不对啊=w= 写程序全是bug啊 ans数组开小了竟然一直不知道,小数据没问题大数据拍不过,交上去RE 蛋疼半天 这个主要把每次询问拆成3个询问. #include<cstdio> ...
- BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...
- BZOJ 1176[Balkan2007]Mokia(CDQ分治)
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 3381 Solved: 1520[Submit][S ...
- [BZOJ1176][Balkan2007]Mokia cdq+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 1395[Submit][S ...
- BZOJ 1176: [Balkan2007]Mokia [CDQ分治]
题意: 有一个n * n的棋盘,每个格子内有一个数,初始的时候全部为0.现在要求维护两种操作: 1)Add:将格子(x, y)内的数加上A. 2)Query:询问矩阵(x0, y0, x1, y1)内 ...
- BZOJ 1176 [Balkan2007]Mokia ——CDQ分治
[题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...
- bzoj1176: [Balkan2007]Mokia cdq
链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...
- bzoj1176: [Balkan2007]Mokia【cdq分治】
把询问搞成4个,cdq分治. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a;i <= b; i++) #d ...
- BZOJ1176 [Balkan2007]Mokia 【CDQ分治】
题目 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输入格式 ...
随机推荐
- Activity服务类-3 FormService服务类
1.获取//通过流程定义ID获取表单字段集合StartFormData startFormData = formService.getStartFormData(processDefinitionId ...
- mysqldump之不老将
–add-drop-database 每个数据库创建之前添加drop数据库语句.mysqldump -uroot -p –all-databases –add-drop-database –add-d ...
- uwsgi相关问题
启动时报错: !!! no internal routing support, rebuild with pcre support !!!安装时 : sudo pip install uwsgi -I ...
- mysql 中文编码问题
- oracle表属性
1. PCTFREE 要形容一个 BLOCK 的运作,我们可以把一个 BLOCK 想成一个水杯.侍者把水倒入放在我们面前的水杯,要多满呢,我们要求他倒 9 分满好了,这时候 PCTFREE 代表着设定 ...
- zg 作业一
作业一: 将xxjjT01增加窗体及按钮(增.修.删) 表单(form1.html) 设定按钮作业,授权 1.新增:XXJJT01+CREATE 2.修改:XXJJT01+UPDATE 3.删除:XX ...
- 关于空指针NULL、野指针、通用指针
http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 ...
- cdoj第13th校赛初赛L - Lovely princess
http://acm.uestc.edu.cn/#/contest/show/54 L - Lovely princess Time Limit: 3000/1000MS (Java/Others) ...
- Python staticmethod() 函数
Python staticmethod() 函数 Python 内置函数 python staticmethod 返回函数的静态方法. 该方法不强制要求传递参数,如下声明一个静态方法: class ...
- 网络基础相关的知识 socket模块
1.架构 1.C/S架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 2.B/S架构:browser浏览器和server服务器 隶属于C/S架构 B/S架构 统一了 ...