[BZOJ2639]矩形计算

题目大意:

给定一个\(n\times m(n,m\le200)\)的矩阵。\(q(q\le10^5)\)次询问,每次询问一个子矩阵中所有数字出现次数的平方和。

思路:

二维莫队。

源代码:

#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
#define y1 f2s3D3YjsPPh2TRa4GJVf
inline int getint() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) neg|=ch=='-';
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return neg?-x:x;
}
const int N=201,TOT=40001,Q=1e5;
int a[N][N],tot,tmp[TOT],bel[N],block,sum,cnt[TOT];
struct Query {
int x1,y1,x2,y2,id;
bool operator < (const Query &rhs) const {
if(bel[x1]!=bel[rhs.x1]) return x1<rhs.x1;
if(bel[y1]!=bel[rhs.y1]) return y1<rhs.y1;
if(bel[x2]!=bel[rhs.x2]) return x2<rhs.x2;
return y2<rhs.y2;
}
};
Query q[Q];
int ans[Q];
int x1,y1,x2,y2;
inline int sqr(const int &x) {
return x*x;
}
inline void mdy_x(const int &x,const int &t) {
for(register int i=y1;i<=y2;i++) {
sum-=sqr(cnt[a[x][i]]);
cnt[a[x][i]]+=t;
sum+=sqr(cnt[a[x][i]]);
}
}
inline void mdy_y(const int &y,const int &t) {
for(register int i=x1;i<=x2;i++) {
sum-=sqr(cnt[a[i][y]]);
cnt[a[i][y]]+=t;
sum+=sqr(cnt[a[i][y]]);
}
}
int main() {
block=12;
const int n=getint(),m=getint();
for(register int i=1;i<=n||i<=m;i++) {
bel[i]=i/block;
}
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=m;j++) {
a[i][j]=getint();
tmp[++tot]=a[i][j];
}
}
std::sort(&tmp[1],&tmp[tot]+1);
tot=std::unique(&tmp[1],&tmp[tot]+1)-tmp-1;
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=m;j++) {
a[i][j]=std::lower_bound(&tmp[1],&tmp[tot]+1,a[i][j])-tmp;
}
}
const int c=getint();
for(register int i=0;i<c;i++) {
int x1=getint(),y1=getint(),x2=getint(),y2=getint();
if(x1>x2) std::swap(x1,x2);
if(y1>y2) std::swap(y1,y2);
q[i]=(Query){x1,y1,x2,y2,i};
}
std::sort(&q[0],&q[c]);
x1=1,y1=1,x2=0,y2=0;
for(register int i=0;i<c;i++) {
while(x1>q[i].x1) mdy_x(--x1,1);
while(x2<q[i].x2) mdy_x(++x2,1);
while(x1<q[i].x1) mdy_x(x1++,-1);
while(x2>q[i].x2) mdy_x(x2--,-1);
while(y1>q[i].y1) mdy_y(--y1,1);
while(y2<q[i].y2) mdy_y(++y2,1);
while(y1<q[i].y1) mdy_y(y1++,-1);
while(y2>q[i].y2) mdy_y(y2--,-1);
ans[q[i].id]=sum;
}
for(register int i=0;i<c;i++) {
printf("%d\n",ans[i]);
}
return 0;
}

[BZOJ2639]矩形计算的更多相关文章

  1. 【二维莫队】【二维分块】bzoj2639 矩形计算

    <法一>二维莫队,对n和m分别分块后,对块从上到下从左到右依次编号,询问以左上角所在块编号为第一关键字,以右下角标号为第二关键字排序,转移时非常厉害. O(q*n*sqrt(n)). #i ...

  2. 【BZOJ2639】矩形计算(二维普通莫队)

    题意:输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值. 矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p^ ...

  3. BZOJ.2639.矩形计算(二维莫队)

    题目链接 二维莫队,按x,y坐标一起分块.(x,y)的所属的块为 x/sq(n)*sq(m) + y/sq(m) 排序时按照(左下点所在块,右上点的标号)排序 排序后 先得出一个询问的答案,然后利用上 ...

  4. PHP图形计算器(计算三角形矩形周长面积)

    运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php;   ...

  5. paper 69:Haar-like矩形遍历检测窗口演示Matlab源代码[转载]

    Haar-like矩形遍历检测窗口演示Matlab源代码 clc; clear; close all; % Haar-like特征矩形计算 board = 24 % 检测窗口宽度 num = 24 % ...

  6. 题解 P1034 【矩形覆盖】

    题面 在平面上有n个点(n≤50),每个点用一对整数坐标表示.例如:当n=4时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这些点可以用k个矩形(1≤ ...

  7. (转)Haar-like矩形遍历检测窗口演示Matlab源代码

    from:http://blog.sina.com.cn/s/blog_736aa0540101kzqb.html clc; clear; close all; % Haar-like特征矩形计算 b ...

  8. CSS学习笔记——包含块 containing block

    以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...

  9. EmguCV 轮廓分析函数汇总

    一.cvApproxPoly 使用多边形逼近一个轮廓,使得顶点数目变少.算法先从轮廓选择2个最远的点,然后将2个连成一个线段,然后再查找轮廓上到线段距离最远的点,添加到逼近后的新轮廓.算法反复迭代,不 ...

随机推荐

  1. jvm系列二、JVM内存结构

    原文链接:http://www.cnblogs.com/ityouknow/p/5610232.html 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemory ...

  2. ASP.NET Core Identity 实战(3)认证过程

    如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆,那么你一定会疑惑 认证这个名词,这太正式了,这到底代表这什么? 获取资源之前得先过两道关卡Authentica ...

  3. 对WinMain程序入口函数返回值为msg.wParam的几点理解

    原文地址:http://blog.csdn.net/setflvet/article/details/6983224 1.在WinMain主函数中,最后的返回值是msg.wParam,这个参数是传递给 ...

  4. python中对列表的所有操作方法

    列表: names = ['a','b','c','d'] 1.追加:names.append() >>> names.append('e') >>> names ...

  5. tomcat生产环境JDK部署及虚拟主机等常用配置详解

    jdk和tomcat环境部署: 1.删除系统自带的openjdk # java -version java version "1.7.0_45" OpenJDK Runtime E ...

  6. ajax使用异步问题

    使用$.ajax(...)中 async:默认为true,表示异步,具体描述,请查看别的文档 var formData = new FormData($("#dataForm")[ ...

  7. 树形插件 --- zTree

    地址:http://www.treejs.cn/v3/api.php

  8. webstrom里面的html页面设置

    代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...

  9. 前端开发必须知道的JS(一) 原型和继承

    原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会讲下闭包,希望对大家有所帮助.若有疑问或不正之处,欢迎提出指正和讨论. 一. 原型与构造函数 Js所有的函数都有一个protot ...

  10. python恶俗古风诗自动生成器

    # -*- coding:utf-8 -*- #模仿自: http://www.jianshu.com/p/f893291674ca#python恶俗古风诗自动生成器from random impor ...