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. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  2. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  3. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  4. (四)Asp.net web api中的坑-【api的返回值】

    (四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...

  5. 【C++】【九】栈的应用

    [C++][九]栈的应用 就近匹配原理及其步骤: 中缀转后缀:

  6. 【跃迁之路】【495天】程序员高效学习方法论探索系列(实验阶段252-2018.06.15)...

    @(跃迁之路)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. ...

  7. (10)Spring Boot修改端口号【从零开始学Spring Boot】

    Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入: server.port=9090 常用配置: #### ...

  8. 【跃迁之路】【725天】程序员高效学习方法论探索系列(实验阶段482-2019.2.15)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. 我将开源我的学习方 ...

  9. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  10. 【跃迁之路】【554天】程序员高效学习方法论探索系列(实验阶段311-2018.08.13)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,, 每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后 ...

最新文章

  1. 问题八十八:Fibonacci数非递归解
  2. Java的内置垃圾收集如何使您的生活更美好(大部分时间)
  3. 计算(a+b)*c的值
  4. hive3新增資料_Hive表新增字段后,新字段无法写入值问题总结
  5. Python pip的使用
  6. linux英文包安装教程视频,Linux源码包安装过程讲解
  7. js权威指南---学习笔记01
  8. 专访飞康新任CEO:云时代下,我们更懂数据保护
  9. jacob将word转换为html
  10. PHP strtotime 将时间转换为时间戳
  11. 全手动封装教程+SRS9.80102 文本教程(适合初学)
  12. html新年倒计时特效,js实现新年倒计时效果
  13. 硬件工程师的面试问题
  14. 六、银行会计核算(全是重点)
  15. 使用Hex view编写脚本生成特定格式刷写文件
  16. 【问链财经-区块链基础知识系列】 第二十三课 一张纸搞定B2B供应链金融产品设计思路
  17. VSCode 代码换行快捷键设置为Shift + Enter
  18. SVACH264AVS标准的去块滤波比较
  19. mac 爱普生打印机驱动_epson l360 mac版驱动下载-爱普生l360驱动Mac版最新版 - 极光下载站...
  20. Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现

热门文章

  1. js防止表单的重复提交
  2. 03-20 专项测试-APP 启动性能分析
  3. linux系统管理命令使用,Linux系统管理命令使用说明
  4. php页面的特点_带你认识PHP的四大特性八大优势
  5. Modifier ‘public‘ is redundant for interface methods错误
  6. anki 插入表格_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
  7. c语言中逗号是什么字符,C语言中的逗号操作符
  8. 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
  9. python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承
  10. oracle number 7 5,oracle上机练习6-7及答案