维护一个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 Input0 4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

Sample Output3
5Hint

保证答案不会超过int范围

思路:三元偏序问题,CDQ分治,(time,x,y),将每一次查询拆成四个点即可,初始值预处理一下就行

using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxm = 2e6+; int C[maxm], S, W, ans[maxm]; void add(int x, int val) {
for(; x <= maxm; x += lowbit(x))
C[x] += val;
} int getsum(int x) {
int ret = ;
for(; x; x -= lowbit(x))
ret += C[x];
return ret;
} void clearr(int x) {
for(; x <= maxm; x += lowbit(x)) {
if(C[x] == ) break;
C[x] = ;
}
} struct Node {
int type, tim, x, y, w, id;
} buf[maxm], res[maxm]; bool cmp_S(Node a, Node b) {
if(a.tim == b.tim && a.x == b.x) return a.y < b.y;
if(a.tim == b.tim) return a.x < b.x;
return a.tim < b.tim;
} void CDQ(int L, int R) {
if(L >= R) return;
int mid = L+R >> ;
CDQ(L, mid), CDQ(mid+, R);
int i = L, j = mid+, k = L;
//左修改右查询
while(i <= mid && j <= R) {
if(res[i].x <= res[j].x) {
if(res[i].type == )
add(res[i].y, res[i].w);
buf[k++] = res[i++];
} else {
if(res[j].type == )
ans[res[j].id] += getsum(res[j].y) * res[j].w;
buf[k++] = res[j++];
}
}
while(i <= mid)
buf[k++] = res[i++];
while(j <= R) {
ans[res[j].id] += getsum(res[j].y) * res[j].w;
buf[k++] = res[j++];
}
for(int t = L; t <= R; ++t) {
clearr(buf[t].y); // 清空树状数组
res[t] = buf[t];
}
} int main() {
scanf("%d%d", &S, &W);
int type, sz = , x1, x2, y1, y2, tim = , query = ;
while(scanf("%d", &type) && type != ) {
if(type == ) {
scanf("%d%d%d", &res[sz].x, &res[sz].y, &res[sz].w);
res[sz].tim = tim++;
res[sz++].type = type;
} else if(type == ) {
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
ans[++query] = (y2 - y1 + ) * (x2 - x1 + ) * S;
res[sz++] = {type, tim++, x1-, y1-, , query};
res[sz++] = {type, tim++, x2, y1-, -, query};
res[sz++] = {type, tim++, x1-, y2, -, query};
res[sz++] = {type, tim++, x2, y2, , query};
}
}
sort(res, res+sz, cmp_S);
CDQ(, sz-);
for(int i = ; i <= query; ++i)
printf("%d\n", ans[i]);
return ;
}

Day6 - L - Mokia HYSBZ - 1176的更多相关文章

  1. Day6 - K - 陌上花开 HYSBZ - 3262

    有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美丽,当且仅Sa>= ...

  2. Day6 - C - Count HYSBZ - 1452 /1452: [JSOI2009]Count

    Description 一个N*M的方格,初始时每个格子有一个整数权值,接下来每次有2个操作: 改变一个格子的权值 求一个子矩阵中某个特定权值出现的个数   Input 每一行有两个数字N,M 接下来 ...

  3. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  4. POJ1195Mobile phones (从二维树状数组到cdq分治)

    Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...

  5. day6_异常捕捉

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/11 14:14 # @Author : 大坏男孩 # @File : d ...

  6. JavaWeb 后端 <二> 之 Servlet 学习笔记

    一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public v ...

  7. HTML5 3D 粒子波浪动画特效DEMO演示

    需要thress.js插件:     http://github.com/mrdoob/three.js // three.js - http://github.com/mrdoob/three.js ...

  8. BZOJ 1176: [Balkan2007]Mokia

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2012  Solved: 896[Submit][St ...

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

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

随机推荐

  1. PAT T1004 To Buy or Not to Buy - Hard Version

    暴力搜索加剪枝~ #include<bits/stdc++.h> using namespace std; ; string t; string s[maxn]; int pos[maxn ...

  2. ipmitool命令

    1.remote access control powerIpmitool -I lanplus -H 192.168.0.10 -U username -P Password chassis pow ...

  3. 吴裕雄--天生自然 JAVA开发学习:解决java.sql.SQLException: The server time zone value报错

    这个异常是时区的错误,因此只你需要设置为你当前系统时区即可,解决方案如下: import java.sql.Connection ; import java.sql.DriverManager ; i ...

  4. Codeforces Round #617 (Div. 3)A. Array with Odd Sum(水题)

    You are given an array aa consisting of nn integers. In one move, you can choose two indices 1≤i,j≤n ...

  5. 本机配置集群主机名访问(Windows配置hosts)

    Windows配置hosts C:\Windows\System32\drivers\etc\hosts 主机IP 主机名 示例: 192.168.1.1 master 192.168.1.2 sla ...

  6. hexo 安装和部署

    因为投递论文需要个人网站,所以今天又来了一次hexo 安装和部署. 参考官方文档:https://hexo.io/zh-cn/docs/ git是需要的哈.自行安装 node需要大于8.10 node ...

  7. linux面试经验

    互联网面试想必是每个学计算机的学生必不可少的环节,无论你的项目经验再多,你不准备基础知识,也还是无济于事.首先来说说关于工作的事情. 三年前,那时候我还是刚刚快要大四毕业的小鲜肉,那时候有个超大的招聘 ...

  8. Systemverilog for design 笔记(一)

    转载请标明出处 一.     System Verilog 声明的位置 1.       包(packages) Verilog要求局部声明: variables, nets, tasks and f ...

  9. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 解决方法

    在VS2012中生成时出错:error C4430: missing type specifier - int assumed. Note: C++ does not support default- ...

  10. Maven项目-jar包冲突:MyServlet is not a Servlet解决方法

    异常显示:运行时jar包冲突异常 问题所在: jar包冲突,自己导入的jar包与tomcat中的jar包相同. 解决方法: 对(servlet,jsp)jar包设置作用域. 再次启动项目,问题已解决.