收获:

  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. js如何查看元素类型

    <script type="text/javascript"> //定义变量temp var temp = Object.prototype.toString.appl ...

  2. Python3 item系列

    一.前言 #在python中一切皆对象 ''' 创建了一个dict实例-->dic就是dict的实例对象 我们通过dic['k1']可以得到k1所对应的值 那么我们自定义一个类,可不可以使用对象 ...

  3. poj1095

    题意:给出n,要求输出第n个二叉树,二叉树编号规则如下图所示: 分析:g[i]表示有i个节点的二叉树,有多少种.f[i][j]表示有i个节点,且左子树有j个节点的树有多少种. sumg[i]表示g数组 ...

  4. idea心得

    概述 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜.出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intel ...

  5. Spring MVC参数注入注意事项

    1.类参数名不能出现‘name’ 2.需提供默认的无参构造

  6. javaScript一些需要注意的细节

    变量声明早于代码运行. 函数声明早于变量声明. this指针代表的是执行当前代码的对象的所有者. JavaScript执行完同步,才能执行异步队列.如:alert,for if while 同步执行, ...

  7. opencv(2)绘图

    绘制直线 函数为:cv2.line(img,Point pt1,Point pt2,color,thickness=1,line_type=8 shift=0) 有值的代表有默认值,不用给也行.可以看 ...

  8. mongo blancer

    在 sharded cluster 体系结构中,Balancer 进程的作用是转移数据,当一个 shard 中的数据比其它 shard 的数据多并达到一定条件时,Balancer 进程触发. 为了减少 ...

  9. nullptr

    以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题.关键字nullptr是std::nullptr_t类型的值,用来指代空指针.nullptr和任何指针类型以及类成员指针 ...

  10. python实现获取系统版本和mac信息上传到指定接口

    import os,platform,uuid,urllib.parse,urllib.request,json def BeforeSystemRequests(): ''' the systemi ...