把询问搞成4个,cdq分治。

 #include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a;i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define mp make_pair
#define pb push_back
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second
using namespace std;
typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//********************************** const int maxn = ; int c[], w;
struct Complex {
int flag;
int x, y, c;
int id, ans;
int pos, l;
inline bool operator < (const Complex &a) const {
return x < a.x ||
x == a.x && y < a.y ||
x == a.x && y == a.y && c < a.c;
}
} src[maxn], t[maxn]; inline void add(int x, int v) {
while (x <= w) {
c[x] += v;
x += x & -x;
}
}
inline int get(int x) {
int ret();
while (x > ) {
ret += c[x];
x -= x & -x;
}
return ret;
}
int ans[]; void cdq(int l, int r) {
if (l == r) return;
int mid = l + r >> , l1 = l, l2 = mid + ;
rep(i, l, r) {
if (src[i].id <= mid && !src[i].l) add(src[i].y, src[i].c);
if (src[i].id > mid && src[i].l) ans[src[i].pos] += src[i].l * get(src[i].y);
}
rep(i, l, r) if (src[i].id <= mid && !src[i].l) add(src[i].y, -src[i].c);
rep(i, l, r) if (src[i].id <= mid) t[l1++] = src[i]; else t[l2++] = src[i];
memcpy(src + l, t + l, (r - l + ) * sizeof(Complex));
cdq(l, mid); cdq(mid + , r);
} int main() {
int cnt(), n(), s;
scanf("%d%d", &s, &w);
int flag;
while (scanf("%d", &flag), flag ^ ) {
if (flag == ) {
++n;
src[n].id = n; src[n].l = ; src[n].pos = ;
scanf("%d%d%d", &src[n].x, &src[n].y, &src[n].c);
}
else {
int x, y, a, b; scanf("%d%d%d%d", &x, &y, &a, &b); ans[++cnt] = s * (a - x) * (b - y); ++n;
src[n].id = n; src[n].l = ; src[n].pos = cnt;
src[n].x = a, src[n].y = b, src[n].c = inf; ++n;
src[n].id = n; src[n].l = -; src[n].pos = cnt;
src[n].x = a, src[n].y = y - , src[n].c = inf; ++n;
src[n].id = n; src[n].l = -; src[n].pos = cnt;
src[n].x = x - , src[n].y = b, src[n].c = inf; ++n;
src[n].id = n; src[n].l = ; src[n].pos = cnt;
src[n].x = x - , src[n].y = y - , src[n].c = inf;
}
}
sort(src + , src + n + );
cdq(, n);
rep(i, , cnt) printf("%d\n", ans[i]);
return ;
}

bzoj1176: [Balkan2007]Mokia【cdq分治】的更多相关文章

  1. BZOJ1176: [Balkan2007]Mokia CDQ分治

    最近很不对啊=w= 写程序全是bug啊 ans数组开小了竟然一直不知道,小数据没问题大数据拍不过,交上去RE 蛋疼半天 这个主要把每次询问拆成3个询问. #include<cstdio> ...

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

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

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

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

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

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

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

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

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

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

  7. bzoj1176: [Balkan2007]Mokia cdq

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

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

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

  9. [bzoj1176]Mokia[CDQ分治]

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

随机推荐

  1. gSoap工具wsdl2h及soapcpp2指令汇总

    gSoap开发包的下载地址http://sourceforge.net/projects/gsoap2,在bin目录下提供了两个工具: 1:wsdl2h:The gSOAP wsdl2h tool i ...

  2. shell写多行到文件中

    用cat或者echo命令输入多行数据到指定文本 #!/bin/sh ( cat <<EOF start() { echo "start" } EOF ) > Ma ...

  3. Windows编译安装mod_wsgi,配合使用Django+Apahce

    编译环境: 均是32位版本 Microsoft Visual Studio 10.0 Microsoft SDKs v7.1 Apache2.4 Python3.4 mod_wsgi-4.5.0 要求 ...

  4. Python -- lambda, map, filter

    lambda f = lambda x : x * 2 f(5) f = lambda x,y,z : x+y+z f(2,1,3) map list(map(lambda x:x[0].upper( ...

  5. Modis 陆地产品格网

    Technorati 标签: Modis,陆地产品,格网

  6. List<Map>去重排序

    数据格式 [ { "id":"d3e8a9d6-e4c6-4dd8-a94f-07733d3c1b59", "parentId":" ...

  7. 第19章 网络通信----UDP程序设计基础

    用户数据报协议(UDP)是网络信息传输的另一种形式. 基于UDP通信的基本模式如下: (1)将数据打包(称为数据包),然后将数据包发往目的地. 发送数据包: 使用DatagramSocket()创建一 ...

  8. sphinx分域搜索【不】需要在conf文件中使用sql_field_string

    请看sql_field_string的文档说明: # combined field plus attribute declaration (from a single column) # stores ...

  9. 配置F5 负载均衡(转)

    转自<网络运维与管理>201406-11 配置F5交换机的问题在于,与平时所学的交换机.路由器思路完全不同,拿到设备后,完全不知如何下手. 网络拓扑图如下: 两台web服务器对外提供服务, ...

  10. UIView 面面观

    原创:转载请注明出处 1.UIView: 一个视图对象控制该区域的渲染,同时也控制内容的交互. 2.UIView的功能就是:展示.渲染.交互 3.UIView 和很多其他视图控件的默认tag值是0,所 ...