bzoj 1176
收获:
1、min, max, sum, 属于判定,等询问是”对象对答案贡献独立“,即不需要其他对象就了能更新答案,并保证只要所有对象更新过答案,那么该答案就是正确的。大概这就是所谓的”修改独立“。
2、处理”先把所有修改给你,再询问“问题时,这道题要用到降维思想,就是处理的顺序也是一维,并且这维可以差分。那么就将二维问题变成了一维问题。(最值不满足差分性)。
/**************************************************************
Problem: 1176
User: idy002
Language: C++
Result: Accepted
Time:6896 ms
Memory:42684 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#define N 2000010
#define M 340010
using namespace std; typedef long long dnt; struct Proc {
int opt, tim;
int id;
int x, y, v;
int t, b;
Proc(){}
Proc( int opt, int tim, int x, int y, int v ):opt(opt),tim(tim),id(),x(x),y(y),v(v),t(),b() {}
Proc( int opt, int tim, int id, int y, int t, int b ):opt(opt),tim(tim),id(id),x(),y(y),v(),t(t),b(b) {}
bool operator<( const Proc &o ) const {
return y<o.y || (y==o.y && opt<o.opt);
}
}; int n, m, s;
Proc proc[M]; int idp;
dnt bit[N];
dnt ans[N]; int ida; void modify( int x, int v ) {
for( int i=x; i<=n; i+=i&-i )
bit[i] += v;
}
dnt query( int x ) {
dnt rt=0LL;
for( int i=x; i; i-=i&-i )
rt += bit[i];
return rt;
}
dnt query( int t, int b ) {
return query(b)-query(t-);
}
void cdq( int lf, int rg ) {
if( lf==rg ) return;
int mid=(lf+rg)>>;
cdq(lf,mid);
cdq(mid+,rg);
sort( proc+lf, proc+rg+ );
for( int i=lf; i<=rg; i++ ) {
Proc &p = proc[i];
if( p.opt== && p.tim<=mid ) {
modify( p.x, p.v );
} else if( p.opt== && p.tim>mid ) {
ans[p.id] -= query( p.t, p.b );
} else if( p.opt== && p.tim>mid ) {
ans[p.id] += query( p.t, p.b );
}
}
for( int i=lf; i<=rg; i++ ) {
Proc &p = proc[i];
if( p.opt== && p.tim<=mid )
modify( p.x, -p.v );
}
}
int main() {
scanf( "%d%d", &s, &n );
for( int i=; ; i++ ) {
int opt;
scanf( "%d", &opt );
if( opt== ) break;
if( opt== ) {
int x, y, v;
scanf( "%d%d%d", &x, &y, &v );
idp++;
proc[idp] = Proc( opt, idp, x, y, v );
} else {
int x0, y0, x1, y1;
scanf( "%d%d%d%d", &x0, &y0, &x1, &y1 );
ida++;
ans[ida] += (dnt) (y1-y0+)*(x1-x0+)*s;
idp++;
proc[idp] = Proc( , idp, ida, y0-, x0, x1 );
idp++;
proc[idp] = Proc( , idp, ida, y1, x0, x1 );
}
}
cdq( , idp );
for( int i=; i<=ida; i++ )
printf( "%lld\n", ans[i] );
}
bzoj 1176的更多相关文章
- BZOJ 1176: [Balkan2007]Mokia
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2012 Solved: 896[Submit][St ...
- 【BZOJ 1176】【Balkan 2007】Mokia
http://www.lydsy.com/JudgeOnline/problem.php?id=1176 整体二分的例题 把每个询问拆成四个询问,整体二分里x坐标递增,按x坐标扫的时候用树状数组维护y ...
- 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 MB Submit: 185 Solved: 94 [ Submit] ...
- BZOJ 1176 Mokia CDQ分治+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- BZOJ 1176[Balkan2007]Mokia(CDQ分治)
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 3381 Solved: 1520[Submit][S ...
- BZOJ 1176 [Balkan2007]Mokia ——CDQ分治
[题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...
- BZOJ 1176 MOKIA
cdq分治. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
- bzoj 1176 Mokia(CDQ分治,BIT)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=96974 [题意] 定义查询操作与修改操作:1 x y z 为 ...
随机推荐
- linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
- Tomcat的JVM设置和连接数设置
Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m Linux环境下修 ...
- Pytorch多进程最佳实践
预备知识 模型并行( model parallelism ):即把模型拆分放到不同的设备进行训练,分布式系统中的不同机器(GPU/CPU等)负责网络模型的不同部分 —— 例如,神经网络模型的不同网络层 ...
- ZOJ 3781 Paint the Grid Reloaded(DFS连通块缩点+BFS求最短路)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5268 题目大意:字符一样并且相邻的即为连通.每次可翻转一个连通块X( ...
- 拉格朗日(Lagrange)插值算法
拉格朗日插值(Lagrange interpolation)是一种多项式插值方法,指插值条件中不出现被插函数导数值,过n+1个样点,满足如下图的插值条件的多项式.也叫做拉格朗日公式. 这里以拉格朗日 ...
- java jar 自启动 centos7 systemctl
我本地有一个 data-service.jar 1. 编写启动脚本 data-service-start [root@iz2ze0fq2isg8vphkpos5sz shell]# more dat ...
- Kafka集成SparkStreaming
Spark Streaming + Kafka集成指南 Kafka项目在版本0.8和0.10之间引入了一个新的消费者API,因此有两个独立的相应Spark Streaming包可用.请选择正确的包, ...
- 1497: [NOI2006]最大获利
新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研 ...
- 团体队列(UVa540)
题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...
- shell在linux里摇摇晃晃
1.shell不只是一种解释器,还是一种编程工具 查看系统中可用的shell,linux默认使用 Bash Shell [root@localhost ~]# cat /etc/shells /bin ...