把询问搞成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. Python 3.5.1 Syntax & APIs(Continue Updating..

    print(x, end=' ') instead of print(x) to escape the default line-changing-output. print(str.ljust(si ...

  2. 模版引擎Handlebars语法(1)

    <script src="handlebars.js"></script></head><body> <div id=&quo ...

  3. HDU 4612 Warm up(双连通分量缩点+求树的直径)

    思路:强连通分量缩点,建立一颗新的树,然后求树的最长直径,然后加上一条边能够去掉的桥数,就是直径的长度. 树的直径长度的求法:两次bfs可以求,第一次随便找一个点u,然后进行bfs搜到的最后一个点v, ...

  4. plat模板修改记录

    每个栏目显示文章数 homepage.hph 94行 $loop = new WP_Query('post_type=post&showposts=6&category_name=xi ...

  5. Git 使用初体验

    http://my.oschina.net/moooofly/blog/228608 很久之前在 http://git.oschina.net/ 上创建了一个私有项目 modb ,目的主要是用来学习如 ...

  6. 利用htmlunit登陆带验证码图片的网站

    http://htsoft.org/html/y2011/822_using-htmlunit-landing-site-with-captcha-image.html 利用htmlunit登陆带验证 ...

  7. 转载 C++学习第9篇---类和类的封装

    http://blog.csdn.net/zuheyawen/article/details/7324340

  8. 关于js的一些基本知识(类,闭包,变量)

    这里写的都是些杂知识,包括私有,类,闭包这些js不可避免的东西,感觉自己有可能会误人子弟.所以有觉得写错了的读者,希望可以及时评论告诉我.我可以及时更正.多谢大家了 1.关于类的创建 类的创建大致可以 ...

  9. Python3基础 函数名.__doc__显示一个函数的单行与多行函数文档

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  10. 【hihoCoder 第133周】2-SAT·hihoCoder音乐节

    http://hihocoder.com/contest/hiho133/problem/1 2-sat模板...详细的题解请看题目里的提示. tarjan模板打错again致命伤qwq #inclu ...