把询问搞成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. POJ 1061 青蛙的约会(欧几里得扩展)

    题意:已知青蛙1位置x,速度m,青蛙2位置y,速度n,纬线长度为l,求他们相遇时最少跳跃次数. 思路:设最小跳跃次数为k,则(x + k*m) - (y + k*n) = q*l:经过整理得到k*(n ...

  2. zendstudio的安装与配置

    <微信公众平台应用开发实战>第1章搭建开发环境和相关技术介绍,本章会先介绍微信公众平台的一些基本概念和公众平台的开发模式:然后讲解如何搭建开发环境—AppServ和zendstudio:然 ...

  3. 12C 连接方式和 Oracle Easy Connect Naming method

    1.12C 连接方式 PDB is not an instance, so using SID in the connection string will not work. When the dat ...

  4. 关闭和释放JDBC

    今天在项目中看到一段代码, Connection conn = null;  ResultSet rs = null;  PreparedStatement pss = null;  try  {  ...

  5. 安装tomcat过程中出现问题小结

    报错信息如下:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these ...

  6. (转)StringTokenizer类的使用

    StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数.1.构造函数public StringTokenizer(String str)public String ...

  7. 方便android开发网站:

    可以通过输入包名或者Google Play地址消灾google市场的应用 http://apps.evozi.com/apk-downloader/ 16进制转常用的10进制 http://www.b ...

  8. android开发中应该注意的问题

    1. Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效.   2. 数据库表段字段常量和SQL逻辑分离,更清 ...

  9. java程序中抛出异常的两种方式,及异常抛出的顺序

    在java中,会经常遇到异常,java提供了两种抛出异常的方式. 方式一: throws ,抛出具体代码中的异常,这种方式编译器都会提示,举例: public static void main(Str ...

  10. prologue epilogue

    https://www.hackerschool.com/blog/7-understanding-c-by-learning-assemblyhttps://www.hackerschool.com ...