1176: [Balkan2007]Mokia

Time Limit: 30 Sec Memory Limit: 162 MB

Submit: 1059 Solved: 432

[Submit][Status][Discuss]

Description

维护一个W*W的矩阵,初始值均为S.每次操作能够添加某格子的权值,或询问某子矩阵的总权值.改动操作数M<=160000,询问数Q<=10000,W<=2000000.

Input

第一行两个整数,S,W;当中S为矩阵初始值;W为矩阵大小

接下来每行为一下三种输入之中的一个(不包括引號):

“1 x y a”

“2 x1 y1 x2 y2”

“3”

输入1:你须要把(x,y)(第x行第y列)的格子权值添加a

输入2:你须要求出以左上角为(x1,y1),右下角为(x2,y2)的矩阵内全部格子的权值和,并输出

输入3:表示输入结束

Output

对于每一个输入2,输出一行,即输入2的答案

Sample Input

0 4

1 2 3 3

2 1 1 3 3

1 2 2 2

2 2 2 3 4

3

Sample Output

3

5

HINT

保证答案不会超过int范围

Source

cdq分治的模板题然而我如今才做这个题。

。。

差分一下询问操作。对全部操作按y排序。

树状数组维护一下。

然后就能够了。

自从看过了Tsinsen上的姿势分

我写代码都開始丧心病狂了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 200000
#define SIZE 2000010
#define lowbit(x) (x&(-x))
using namespace std;
int w;
int top,opt,L,R,l,r,delta,Top;
struct Query
{
int op;
int x,y,A;
int t,id;
bool operator <(const Query& a)const
{
if (x == a.x && y == a.y) return op < a.op;
if (x == a.x) return y < a.y;
return x < a.x;
}
}que[MAXN],newq[MAXN];
int ans[MAXN],c[SIZE];
inline void in(int &x)
{
x=0;char ch = getchar();
while (!(ch >= '0' && ch <= '9')) ch = getchar();
while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0',ch = getchar();
}
inline void add(int i,int x)
{
while (i && i <= w) c[i] += x,i += lowbit(i);
}
inline int query(int i)
{
int ret = 0;
while (i) ret += c[i],i -= lowbit(i);
return ret;
}
inline void Solve(int l,int r)
{
int mid = (l + r) >> 1,tp1 = l,tp2 = mid + 1;
if (l == r) return;
for (int i = l;i <= r;i++)
{
if (que[i].t <= mid && que[i].op == 1) add(que[i].y,que[i].A);
if (que[i].t > mid && que[i].op == 2) ans[que[i].id] += query(que[i].y) * que[i].A;
}
for (int i = l;i <= r;i++)
if (que[i].t <= mid && que[i].op == 1) add(que[i].y,-que[i].A);
for (int i = l;i <= r;i++)
if (que[i].t <= mid) newq[tp1++] = que[i];
else newq[tp2++] = que[i];
memcpy(que+l,newq+l,sizeof(Query)*(r - l + 1));
Solve(l,mid);Solve(mid+1,r);
}
int main()
{
freopen("mokia.in","r",stdin);
freopen("mokia.out","w",stdout);
in(opt);in(w);
while (1)
{
in(opt);
if (opt == 3) break;
switch (opt)
{
case 1:
in(L);in(R);in(delta);
que[++top].op = opt;que[top].x = L;que[top].y = R;que[top].A = delta;que[top].t = top;
break;
case 2:
in(L);in(R);in(l);in(r);
que[++top].op = opt;que[top].x = L - 1;que[top].y = R - 1;que[top].t = top;que[top].A = 1;que[top].id = ++Top;
que[++top].op = opt;que[top].x = L - 1;que[top].y = r;que[top].t = top;que[top].A = -1;que[top].id = Top;
que[++top].op = opt;que[top].x = l;que[top].y = R - 1;que[top].t = top;que[top].A = -1;que[top].id = Top;
que[++top].op = opt;que[top].x = l;que[top].y = r;que[top].t = top;que[top].A = 1;que[top].id = Top;
break;
}
}
sort(que + 1,que + top + 1);
Solve(1,top);
for (int i = 1;i <= Top;i++) printf("%d\n",ans[i]);
}

【BOI2007】【BZOJ1176】Mokia的更多相关文章

  1. 洛谷题解 P4392 【[BOI2007]Sound 静音问题】

    题目链接 其实写线段树的题还是比较的令我开心的因为不用脑子 怎么判断这题是要写线段树的? 1.暴力只能拿50分 2.这题是个绿题 3 .看数据范围 #include <cstdio> #i ...

  2. 【BZOJ1176】[BOI2007]Mokia 摩基亚

    [BZOJ1176][BOI2007]Mokia 摩基亚 题面 bzoj 洛谷 题解 显然的\(CDQ\)\(/\)树套树题 然而根本不想写树套树,那就用\(CDQ\)吧... 考虑到点\((x1,y ...

  3. 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治

    [BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...

  4. 【BZOJ1176】Mokia(CDQ分治)

    [BZOJ1176]Mokia(CDQ分治) 题面 BZOJ权限题啊,,,, dbzoj真好 Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的 ...

  5. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  6. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  7. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  8. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  9. 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...

  10. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

随机推荐

  1. An update on OS X Code Signing(OS X代码签名)

    There has recently been updates to the OS X code signing process. These updates also affect Qt appli ...

  2. C++ ofstream和ifstream详细用法

    转载地址:http://soft.chinabyte.com/database/460/11433960.shtml ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就 ...

  3. Android 网络交互之MD5为什么要加盐

    MD5为什么要加盐 之前面试的时候,遇到一个面试的哥哥.不停的跟我确认我对网络传输过程中的password进行MD5加密的时候,是否加key了. 当时我很纳闷,因为MD5本身已经是不可逆的了,需要破解 ...

  4. CSS块元素与内联元素(转)

    为什么<a><span>这种标签定义width,height等CSS属性时会发现完全不生效? 因为它们不是容器,它们是内联元素,不是块元素 CSS 块元素与内联元素 关键字: ...

  5. Android的AsyncTask类的解读

    国庆节放假.搞了半个月都没有上班了,coding的时候一点都不在状态,本来这篇文章是在国庆节前写完的,可是由于自己的懒 惰,导致延期到国庆节,哎,这种习惯真心不好呀...不多说了以下来进入正题 之前我 ...

  6. 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore

    前几篇分析了一下AQS的原理和实现.这篇拿Semaphore信号量做样例看看AQS实际是怎样使用的. Semaphore表示了一种能够同一时候有多个线程进入临界区的同步器,它维护了一个状态表示可用的票 ...

  7. ETHERNET帧结构

    以太网帧http://blog.csdn.net/guoshaobei/article/details/4768514 Ethernet的帧格式 (转)  http://jiangqiaosun.bl ...

  8. Android Studio入门到精通

    链接地址:http://blog.csdn.net/yanbober/article/details/45306483 目标:Android Studio新手–>下载安装配置–>零基础入门 ...

  9. listview 拖动item效果实现

    listview 拖动item效果实现 效果图如下: 拖拽前: 拖拽后: 首先参考源码中:TouchInterceptor 类,该类会在下面给出: 第一步:主类: /**  *   */ packag ...

  10. centos6.5 gsoap安装过程+ php添加soap扩展

    参考博客: CentOS编译安装gSOAP Linux C实现webservice调用 安装gsoap流程  里面提到make时可能碰到的问题 还没有用到 1.从官网下载最新的版本:http://so ...