矩形计算(钟沛林)

796. 子矩阵的和 输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数 n,m,q。 接下来 n 行,每行包含 m 个整数,表示整数矩阵。 接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。 输出格式 共 q 行,每行输出一个询问的结果。 数据范围 1≤n,m≤1000, 1≤q≤200000, 1≤x1≤x2≤n, 1≤y1≤y2≤m, −100 阅读详情

http://www.tsinsen.com/ViewGProblem.html?gpid=-1000001310

问题描述
  输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值。矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p2。
输入格式
  第一行两个整数n,m表示矩阵的规模。
  接下来n行每行m个整数,表示这个矩阵的每个元素。
  再下来一行一个整数q,表示询问个数。
  接下来q行每行四个正整数x1,y1,x2,y2,询问以第x1行第y1列和第x2行第y2列的连线为对角线的子矩阵的权值。
输出格式
  输出q行每行一个整数回答对应询问。
样例输入
3 4
1 3 2 1
1 3 2 4
1 2 3 4
8
1 2 2 1
1 1 2 1
1 1 3 4
1 1 1 1
2 2 3 3
3 4 2 2
1 3 3 1
2 4 3 4
样例输出
8
4
38
1
8
12
27
4
数据规模和约定
  对于全部数据
  1<=n,m<=200
  q<=100000
  |矩阵元素大小|<=2*109
case13 3
-1 1 2
-1 -1 1
10 2 1
3
1 3 3 1
1 3 2 2
2 1 3 2
case2n<=10,m<=10,q<=100000 
case3n<=100,m<=100,q<=5000 
case4n<=200,m<=200,q<=1000 
case5n<=200,m<=200,q<=1000 
case6n<=200,m<=200,q<=1000 
case7n<=100,m<=100,q<=50000原矩阵中的不同元素不超过200
case8n<=100,m<=100,q<=50000原矩阵中的不同元素不超过200
case9n<=100,m<=100,q<=50000原矩阵中的不同元素不超过200
case10n<=200,m<=200,q<=100000原矩阵中的不同元素不超过200
case11n<=200,m<=200,q<=100000原矩阵中的不同元素不超过200
case12n<=200,m<=200,q<=100000原矩阵中的不同元素不超过200
case13n<=100,m<=100,q<=100000 
case14n<=100,m<=100,q<=100000 
case15n<=200,m<=200,q<=100000 
case16n<=200,m<=200,q<=100000 
case17n<=200,m<=200,q<=100000 
case18n<=200,m<=200,q<=100000 
case19n<=200,m<=200,q<=100000 
case20n<=200,m<=200,q<=100000 


首先考虑颜色少于200种的解法

对于每种颜色开一个n*m的矩阵,f[i,j]表示以(1,1)为左上角,(i,j)为右下角的举行中包含这种颜色的有多少个

这样就可以在O(1)的时间内求出来一个举行中有该种颜色多少个了

设颜色种类为c,复杂度为O(cq)

颜色多了自然不可解……

如何解决呢

假设有一个划分标准p

在矩阵中出现次数多于p次的颜色按上面的做法来做,那么回答一次询问的复杂度为n*m/p

少于的我们采用另外一种做法

一个矩阵里一种颜色的出现次数的平方等于以两个相同颜色的点为顶点形成的在询问的矩形里的矩形个数

所以可以预先把这些矩形生成出来,查询当前矩形包含多少个矩形

矩形个数最多为n*m/p*p^2=nmp个

查询矩形内有多少个矩形,满足的条件为x1<=x1i,x2i<=x2,y1<=y1i,y2i<=y2

这个可以用四维树状数组来求

但是四维树状数组复杂度为log^4 n,这道题又不存在修改,询问之间也没有关系

所以可以离线来做,按询问x1从大到小来回答询问,然后按x1从大到小来插入矩形,这样用三维树状数组即可完成

(为什么不用线段树……因为线段树空间复杂度为(2n)^3,常数还较大……会爆空间)

至此,这道题完全解决,虽然复杂度算下来要超时,但实际上是跑得过的……

顺道一提,这个颜色少于200种用这个方法跑的比较慢……直接用最初的方法就好了

我的p取值为sqrt((n*m+q)/2)



{$inline on}
program t2;
type
  node=record
         x1,x2,y1,y2:longint;
       end;
const
  maxn=400001;

var
  w:longint;
  o,sum,p,all,tot,n,m,i,j,k,q,x1,y1,x2,y2,u,v:longint;
  num,count,new:array [0..40001] of longint;
  map:array [0..201,0..201] of longint;
  quick:array [0..401,0..201,0..201] of longint;
  tree:array [0..201,0..201,0..201] of longint;
  ans:array [0..100001] of longint;
  dl:array [0..100001] of longint;
  que:array [0..100001] of node;
  four:array [0..maxn] of node;
  x,y:array [0..40001] of longint;

procedure swap (var a,b:longint);inline;
begin
  if a=b then exit;
  b:=a xor b;
  a:=a xor b;
  b:=a xor b;
end;

procedure disp;

  procedure qsort (s,e:longint);
  var
    i,j,k:longint;
  begin
    if s>=e then exit;
    i:=s;
    j:=e;
    k:=dl[(s+e) div 2];
    while i<=j do
      begin
        while dl[i]<k do inc(i);
        while dl[j]>k do dec(j);
        if i>j then break;
        swap(dl[i],dl[j]);
        inc(i);
        dec(j);
      end;
    qsort(s,j);
    qsort(i,e);
  end;

begin
  qsort(1,tot);
  all:=0;
  i:=1;
  while i<=tot do
    begin
      k:=i;
      while dl[i]=dl[k] do inc(i);
      inc(all);
      new[all]:=dl[k];
    end;
end;

procedure renum;inline;

  function convert (now:longint):longint;inline;
  var
    mid,s,e:longint;
  begin
    s:=1;
    e:=all;
    while s<>e do
      begin
        mid:=(s+e) div 2;
        if new[mid]<now then s:=mid+1
                        else e:=mid;
      end;
    exit(s);
  end;

begin
  for i:=1 to n do
    for j:=1 to m do
      begin
        map[i,j]:=convert(map[i,j]);
        inc(count[map[i,j]]);
      end;
end;

procedure case1;inline;
var
  ans,w:longint;
begin
  tot:=0;
  for i:=1 to all do
    if count[i]>=p then
      begin
        inc(tot);
        for j:=1 to n do
          for k:=1 to m do
            begin
              quick[tot,j,k]:=quick[tot,j-1,k]
                             +quick[tot,j,k-1]
                             -quick[tot,j-1,k-1];
              if map[j,k]=i then inc(quick[tot,j,k]);
            end;
      end;
  if p<>0 then exit;
  read(q);
  for i:=1 to q do
    begin
      read(x1,y1,x2,y2);
      if x1>x2 then swap(x1,x2);
      if y1>y2 then swap(y1,y2);
      ans:=0;
      for k:=1 to tot do
        begin
          w:=quick[k,x2,y2]
            -quick[k,x1-1,y2]
            -quick[k,x2,y1-1]
            +quick[k,x1-1,y1-1];
          ans:=ans+w*w;
        end;
      writeln(ans);
    end;
  halt;
end;

procedure case2;

  procedure qsort (s,e:longint);
  var
    i,j,k:longint;
  begin
    if s>=e then exit;
    i:=s;
    j:=e;
    k:=map[x[(s+e) div 2],y[(s+e) div 2]];
    while i<=j do
      begin
        while map[x[i],y[i]]<k do inc(i);
        while map[x[j],y[j]]>k do dec(j);
        if i>j then break;
        swap(x[i],x[j]);
        swap(y[i],y[j]);
        inc(i);
        dec(j);
      end;
    qsort(s,j);
    qsort(i,e);
  end;

  procedure qsort1 (s,e:longint);
  var
    i,j,k:longint;

    procedure swap (var a,b:node);inline;
    var
      i:node;
    begin
      i:=a;
      a:=b;
      b:=i;
    end;

  begin
    if s>=e then exit;
    i:=s;
    j:=e;
    k:=four[(s+e) div 2].x1;
    while i<=j do
      begin
        while four[i].x1<k do inc(i);
        while four[j].x1>k do dec(j);
        if i>j then break;
        swap(four[i],four[j]);
        inc(i);
        dec(j);
      end;
    qsort1(s,j);
    qsort1(i,e);
  end;

begin
  o:=0;
  for i:=1 to n do
    for j:=1 to m do
      if count[map[i,j]]<p then
        begin
          inc(o);
          x[o]:=i;
          y[o]:=j;
        end;
  qsort(1,o);
  sum:=0;
  i:=1;
  while i<=o do
    begin
      k:=i;
      while (i<=o)and(map[x[i],y[i]]=map[x[k],y[k]]) do inc(i);
      for u:=k to i-1 do
        for v:=k to i-1 do
          begin
            x1:=x[u];
            y1:=y[u];
            x2:=x[v];
            y2:=y[v];
            if x1>x2 then swap(x1,x2);
            if y1>y2 then swap(y1,y2);
            inc(sum);
            four[sum].x1:=x1;
            four[sum].x2:=x2;
            four[sum].y1:=y1;
            four[sum].y2:=y2;
          end;
    end;
  qsort1(1,sum);
end;

procedure question;

  procedure qsort (s,e:longint);
  var
    i,j,k:longint;
  begin
    if s>=e then exit;
    i:=s;
    j:=e;
    k:=dl[(s+e) div 2];
    while i<=j do
      begin
        while que[dl[i]].x1<que[k].x1 do inc(i);
        while que[dl[j]].x1>que[k].x1 do dec(j);
        if i>j then break;
        swap(dl[i],dl[j]);
        inc(i);
        dec(j);
      end;
    qsort(s,j);
    qsort(i,e);
  end;

begin
  read(q);
  for i:=1 to q do
    begin
      read(x1,y1,x2,y2);
      if x1>x2 then swap(x1,x2);
      if y1>y2 then swap(y1,y2);
      que[i].x1:=x1;
      que[i].x2:=x2;
      que[i].y1:=y1;

      que[i].y2:=y2;
      dl[i]:=i;
    end;
  qsort(1,q);
end;

function lowbit (x:longint):longint;inline;
begin
  exit(x and (x xor (x-1)));
end;

procedure insert (x2,y1,y2:longint);
var
  i,j,k:longint;
begin
  i:=x2;
  while i<=n do
    begin
      j:=y1;
      while j<=m do
        begin
          k:=y2;
          while k<=m do
            begin
              inc(tree[i,j,k]);
              k:=k+lowbit(k);
            end;
          j:=j+lowbit(j);
        end;
      i:=i+lowbit(i);
    end;
end;

function find (x2,y1,y2:longint):longint;
var
  ans:longint;
  i,j,k:longint;
begin
  ans:=0;
  i:=x2;
  while i>0 do
    begin
      j:=m;
      while j>0 do
        begin
          k:=y2;
          while k>0 do
            begin
              ans:=ans+tree[i,j,k];
              k:=k-lowbit(k);
            end;
          j:=j-lowbit(j);
        end;
      j:=y1-1;
      while j>0 do
        begin
          k:=y2;
          while k>0 do
            begin
              ans:=ans-tree[i,j,k];
              k:=k-lowbit(k);
            end;
          j:=j-lowbit(j);
        end;
      i:=i-lowbit(i);
    end;
  exit(ans);
end;

procedure solve;
begin
  k:=sum;
  for i:=q downto 1 do
    begin
      x1:=que[dl[i]].x1;
      x2:=que[dl[i]].x2;
      y1:=que[dl[i]].y1;
      y2:=que[dl[i]].y2;
      for j:=1 to tot do
        begin
          w:=quick[j,x2,y2]
            -quick[j,x1-1,y2]
            -quick[j,x2,y1-1]
            +quick[j,x1-1,y1-1];
          ans[dl[i]]:=ans[dl[i]]+w*w;
        end;
      while (k>0)and(four[k].x1>=x1) do
        begin
          insert(four[k].x2,four[k].y1,four[k].y2);
          dec(k);
        end;
      w:=find(x2,y1,y2);
      ans[dl[i]]:=ans[dl[i]]+w;
    end;
end;

begin
  read(n,m);
  for i:=1 to n do
    for j:=1 to m do
      begin
        read(map[i,j]);
        inc(tot);
        dl[tot]:=map[i,j];
      end;
  disp;
////////////////////////////////////////////
  renum;
////////////////////////////////////////////
  if all<=200 then p:=0
              else p:=trunc(sqrt((n*m+q))/2);
  case1;
  case2;
////////////////////////////////////////////
  question;
////////////////////////////////////////////
  solve;
////////////////////////////////////////////
  for i:=1 to q do
    writeln(ans[i]);
end.



ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析 本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。 阅读详情

相关推荐

别再瞎改注册表了!实测Win10/Win11远程桌面60帧的正确姿势(附ToDesk对比)

本文深入解析Windows远程桌面60帧优化的科学方法,揭示常见误区并提供实测有效的解决方案。从版本差异到硬件加速,再到第三方工具对比(如ToDesk),帮助用户避开无效的注册表修改,实现流畅的远程桌面体验。

weixin_33738555的博客 343

A1310. 矩形计算(钟沛林) 二维莫队

-歪,110,我要报警。这转移真tm难写#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std;const int N=205; const int M=100005; const int NM=40005; int n,m,Q,ans,cnt,tot; int b[N][

ws_fqk 758

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 327

算法(子矩阵的和)

输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。 输出格式 共q行,每行输出一个询问的结果。 数据范围 1≤n,m≤1000, 1≤q≤200000, 1≤x1≤x2≤n, 1≤y1≤y2≤m, −1000≤矩阵内元素的值≤1

Kerryliuyue的博客 1027

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.10和OpenCV4.2.0等。VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

zardforever123的博客 2万+

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

本人就职海外从事人工智能领域开发设计。 希望花时间总结下流行的机器学习算法,希望大家一起学习,欢迎指正!

Hyman Qiu 2317

子矩阵的和

输入一个 n行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。

2301_79101393的博客 187

详解k-means++

一、概述 定义:k-means++是一种为k-means聚类算法选择初始值(或“种子”)的算法。它是NP-hard k-means问题的一种近似算法,它是一种避免标准k-means算法有时发现的较弱聚类的方法。 K-means与K-means++:原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚

qq_42364307的博客 3万+

算法练习-5

1、一维前缀和 给了你n个非负整数,分别记为第1个数字至第n个数字,查询q次,询问第f个数到第t个数之间所有数字的和。 Input:输入的第一行包含两个整数n,q( 1≤n,q≤105 ),含义如题面所示;第二行包含n个非负整数,每个数字均不超过109;下面q行,每行包括两个数字f,t(1≤f≤t≤n),含义如题面所示。 Output: 对于这q行中的每一行,请你输出一个数字f,t之间的和,包含f t Sample Input: 9 4 1 3 4 6 2 5 1000000000 1000000000 1

wang_423的博客 1473

Android 13高通平台CTS camera部分fail项修改(续)

接着上一篇,有几个提了case高通也分析了很久的fail项,其中最离谱的是问题1,第一个接手case的人反反复复处理、内部排查踢皮球、要求log,折腾了很久,最终就给出个解不了的结论。后面还是靠着自己发现了一些蛛丝马迹,并且换了个case接手人才最终解决。

hkj887tg的博客 2061

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1168

51Nod5105 子矩阵求和

二维数组

阿正的梦工坊 800

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2087

GDUT 专题一 E - 子矩阵求和 (模拟)2022

题面:给出一个 nn 行 mm 列的矩阵,矩阵的每个位置有一个非负整数 a[i][j]a[i][j],有 qq 次询问,每次询问求一个左上角为 (a,b)(a,b),右下角为 (c,d)(c,d) 的子矩阵的所有数之和。 输入格式 第一行两个整数 n,mn,m,表示矩阵的行和列的大小。 接下来 nn 行每行 mm 个整数,为矩阵内容。 接下来一行为一个整数 qq ,表示询问次数。 接下来 qq 行每行 44 个整数 a,b,c,da,b,c,d,含义见题面。 输出格式 共 qq 行,第 ii 行为第 ii

l_migrant的博客 671

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

莫队算法小结

wtf,最近挖坑有点小多啊,没办法>_<容我先把糖果公园A了再来写这个吧= =看看今天能不能A掉好吧,我承认我第二天才把糖果公园A掉>_<下面把这篇小结补上首先众所周知的是莫队算法是要把询问先按左端点属于的块排序,再按右端点排序复杂度就先不证了,有兴趣的同学可以自己YY下或者查阅资料下面举几个例子详细说明1.小Z的袜子 Description:给定一个序列mm个询问每次询问:区间中选两个数,两个数相

mlzmlz95的专栏 2215

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【模拟】I Liked Matrix!

题目: 给定一个 n ∗ m 的矩阵 A,对其进行 q 次询问:以 (x1, y1) 为左上角,(x2, y2) 为右下角的子矩 阵中,所有元素的最大值。 输入: 第一行包含三个整数 n,m 和 q。 之后 n 行每行包含 m 个整数 Ai,j。 之后 q 行每行包含四个整数 x1,y1,x2 和 y2。 输出: 共 q 行包含一个整数 ans,表示子矩阵中所有元素的最大值。 样例输入: 3...

还有一年 254

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

算法笔迹.矩阵的前缀和

矩阵的前缀和

xin007hoyo的博客 340

Bzoj2639: 矩形计算

Time Limit:20 SecMemory Limit:256 MBSubmit:178Solved:94 Description  输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值。矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p2。 Input   ...

dezhen7015的博客 228

A. 实验8_1_矩阵转置

问题描述: 任意给定一个n*m的矩阵,矩阵的行数为n,列数为m。你的任务是实现矩阵的转置,即行列互换。 输入与输出要求: 输入两个整数n、m,代表矩阵的行数与列数,n、m的范围均是1—100。然后输入n*m个整数,即此矩阵的元素。输出经过矩阵转置得到的新矩阵,新矩阵占m行,n列。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。 程序运行效果: Sample 1: 3 5↙ 5 5 5 5 5↙ 3 3 3 3 3↙ 1 1 1 1 1↙ 5 3 1 5 3 1 5 3 1 5 3 1 5 .

yyyyyyy_a的博客 2600

7-1 实验8_1_矩阵转置 (100 分)

任意给定一个n*m的矩阵,矩阵的行数为n,列数为m。你的任务是实现矩阵的转置,即行列互换。 输入格式: 第一行为两个整数n、m,代表矩阵的行数与列数,n、m的范围均是1—100。然后输入n*m个整数,即此矩阵的元素。。 输出格式: 经过矩阵转置得到的新矩阵,新矩阵占m行,n列。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。 输入样例: 3 5 5 5 5 5 5 3 3 3 3 3 1 1 1 1 1 输出样例: 5 3 1 5 3 1 5 3 1 5 3 1 5 3 1

qq_62560218的博客 309

[bzoj2639]矩形计算——二维莫队or四维数点

题目大意: 输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值。矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p2p^2p2。 思路: 二维莫队的模板题,但是复杂度好像不太明确。。。 于是可以换一种思路,考虑平方的几何意义,即两个颜色相同的点可以构成一个点对,每一次询问在某矩阵中出现的点对个数。 对于每一个矩...

ylsoi的博客 1240

Acwing寒假算法基础课:子矩阵的和

传送门 输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。 输出格式 共q行,每行输出一个询问的结果。 。。。 发现这题的xy和我现象中的xy不一样。。。 #include<bits/stdc++.h> using

p15008340649的博客 369

20210420子矩阵求和

子矩阵求和 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 给出一个n行m列的矩阵,矩阵的每个位置有一个非负整数a[i][j],有q次询问,每次询问求一个左上角为(a,b),右下角为(c,d)的子矩阵的所有数之和。 输入 第一行两个整数n,m,表示矩阵的行和列的大小 接下来n行每行m个整数,为矩阵内容 接下来一行为一个整数q,表示询问次数 接下来q行每行4个整数a,b,c,d,含义见题面。 输出 共q行,第i行为第i个询问的答案。 样例输入 .

K1_KCY的博客 1808

【BZOJ2639】矩形计算(四维偏序)

Description 输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值。矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p2。 Solution 由于出现ppp次的元素的贡献是p2p^2p2,我们可以看做每一对相同的元素可以产生111的贡献。 我们定一个SSS,大概为404040。 对于出现次数大于SSS...

დ♂Hany01's Blog Space♂ღ 667

C++题解:子矩阵求和

目录 题目 题解 题目 1000ms 131072K 给出一个n行m列的矩阵,矩阵的每个位置有一个非负整数 a[i][j],有q次询问,每次询问求一个左上角为(a,b)(,右下角为(c,d) 的子矩阵的所有数之和。 输入格式 第一行两个整数n,m,表示矩阵的行和列的大小。 接下来n行每行m个整数,为矩阵内容。 接下来一行为一个整数q,表示询问次数。 接下来q行每行4个整数a,b,c,d,含义见题面。 输出格式 共q行,第...

Keven_11的博客 3029
上一篇: 黑白染色(钟沛林)
下一篇: acfun id
weixinding
博客等级 码龄15年 39粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值