收获:

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

  1. BZOJ 1176: [Balkan2007]Mokia

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

  2. 【BZOJ 1176】【Balkan 2007】Mokia

    http://www.lydsy.com/JudgeOnline/problem.php?id=1176 整体二分的例题 把每个询问拆成四个询问,整体二分里x坐标递增,按x坐标扫的时候用树状数组维护y ...

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

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

  4. BZOJ 1176([Balkan2007]Mokia-CDQ分治-分治询问)

    1176: [Balkan2007]Mokia Time Limit: 30 Sec   Memory Limit: 162 MB Submit: 185   Solved: 94 [ Submit] ...

  5. BZOJ 1176 Mokia CDQ分治+树状数组

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

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

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

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

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

  8. BZOJ 1176 MOKIA

    cdq分治. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  9. bzoj 1176 Mokia(CDQ分治,BIT)

    [题目链接]  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=96974 [题意] 定义查询操作与修改操作:1 x y z 为 ...

随机推荐

  1. java7与java8中计算两个日期间隔多少年多少月多少天的实现方式

    最近工作中碰到个新需求,计算每个员工入职公司的时长,要求形式为多少年多少月多少天形式,某个值为0就跳过不显示,因为前段时间学习过java8新特性,对于这个需求,java8的新时间日期API可以直接解决 ...

  2. JavaScript 简单吗

    英文:Aurélien Hervé  译文:众成翻译/msmailcode 这里有一些 Javascript初学者应该知道的技巧和陷阱.如果你已经是专家了,顺便温习一下. Javascript也只不过 ...

  3. 树莓派指定静态IP

    1.备份并清空 interfaces 文件 cp /etc/network/interfaces /etc/network/interfaces.bak vi /etc/network/interfa ...

  4. [android]解析XML文件的方法有三种:PULL,DOM,SAM

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...

  5. IntelliJ IDEA 建空包合并问题。

    举例:我想在一个包下,创建2个空子包,这个时候,却无法再IDE里完成. 老是这样子,如果选中dff.sfsdf再右键 创建包的话,结局是再sfsdf下 又创建一个文件夹. 如果右键创建类的话,实际上在 ...

  6. java容器---Comparable & Comparator

    1.接口Comparable<T> API    参数类型:T ---可以与此对象进行比较的那些对象的类型 此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的c ...

  7. PowerTool x64驱动模块逆向分析(持续更新)

    比赛打完了,来继续搞了,因为那个主动防御正在写,所以想找找思路正好想到可以来逆向一下PT的驱动模块看看pt大大是怎么写的程序. PT x64版本的驱动模块是这个kEvP64.sys. 0x0 先来看看 ...

  8. Radon变换——MATLAB

    算法说明: 图像的Radon变换是每个像素的Radon变换的总和. 该算法首先将图像中的像素分成四个子像素,并分别投影每个子像素,如下图所示. 根据投影位置和箱体中心之间的距离,每个子像素的贡献按比例 ...

  9. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  10. 【LOJ】#2541. 「PKUWC2018」猎人杀

    题解 一道神仙的题>< 我们毙掉一个人后总的w的和会减少,怎么看怎么像指数算法 然而,我们可以容斥-- 设\(\sum_{i = 1}^{n} w_{i} = Sum\) 我们把问题转化一 ...