题目描述

Description

Input

从文件b.in中读入数据. 第丬行三个正整数 n, m, K. 接下来 n 行每行 m 个正整数, 表示矩阵A.

Output

输出到文件b.out中. 不行, 两个数分别表示机大值和和.

Sample Input

3 5 2

1 5 3 3 3

4 1 3 3 4

4 2 4 4 3

Sample Output

4 20

Data Constraint

题解

从左往右扫,维护一个宽为K的区域

对于一个位置(i,j),求出bz[i][j]表示(i,j+1)~(i,j+K)之中是否有a[i][j]

那么在求以每个点为左上角时,区域内的点的纵坐标不会影响到结果

所以维护每种权值出现的行,0-->1就直接加,1-->0就是在删掉一个bz[i][j]=0的值时

只需要在删/加的时候求出一种值上的一个位置的前/后继

可以线段树,也可以用bitset的_Find_next()

然而NOIP应该不能用

所以显然手写bitset(

code

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define change(T,t) b[T][(t)/64]^=p[(t)%64]
#define pd(T,t) (b[T][(t)/64]&p[(t)%64])
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define low(x) ((x)&-(x))
#define Len 100000
using namespace std; unsigned long long p[64];
int a[3001][3001];
int f[3002][3001];
bool bz[3001][3001];
int num[100001];
unsigned long long b[200001][47];
char st[72000001];
char *Ch=st;
int N,n,m,K,i,j,k,l;
long long ans1,ans2; int getint()
{
int x=0; while (*Ch<'0' || *Ch>'9') *++Ch;
while (*Ch>='0' && *Ch<='9') x=x*10+(*Ch-'0'),*++Ch; return x;
} int find(int T,int t)
{
int i,j,s=t/64;t%=64;
unsigned long long S=b[T][s]; if (t<63)
S>>=t+1;
else
S=0; if (S)
return floor(log2(low(S))+0.1)+64*s+t+1; fo(i,s+1,N)
if (b[T][i])
return floor(log2(low(b[T][i]))+0.1)+64*i; return -1;
} void add(int I,int i,int j,int s)
{
int k,l,L,R; change(a[i][j],i);
change(a[i][j]+Len,n-i+1); k=find(a[i][j]+Len,n-i+1);if (k!=-1) k=n-k+1;
l=find(a[i][j],i); L=max(i-K+1,1);
R=i; if (k!=-1) L=max(L,k+1);
if (l!=-1) R=min(R,l-K); if (L<=R)
f[L][I]+=s,f[R+1][I]-=s;
} int main()
{
// freopen("b53.in","r",stdin);
freopen("b.in","r",stdin);
freopen("b.out","w",stdout); fread(st,1,72000001,stdin); p[0]=1;
fo(i,1,63)
p[i]=p[i-1]<<1; n=getint(),m=getint(),K=getint();N=n/64;
fo(i,1,n)
{
fo(j,1,m)
a[i][j]=getint();
} memset(num,127,sizeof(num)); fo(i,1,n)
{
fd(j,m,1)
{
bz[i][j]=(num[a[i][j]]-j)<=K;
num[a[i][j]]=j;
} fo(j,1,m)
num[a[i][j]]=2133333333;
} fo(j,1,K)
{
fo(i,1,n)
if (!pd(a[i][j],i))
add(1,i,j,1);
}
fo(j,2,m-K+1)
{
fo(i,1,n)
f[i][j]=f[i][j-1]; fo(i,1,n)
{
if (!pd(a[i][j+K-1],i))
add(j,i,j+K-1,1);
if (!bz[i][j-1])
add(j,i,j-1,-1);
}
} fo(i,1,n-K+1)
{
fo(j,1,m-K+1)
{
f[i][j]+=f[i-1][j]; ans1=max(ans1,f[i][j]);
ans2+=f[i][j];
}
}
printf("%lld %lld\n",ans1,ans2); fclose(stdin);
fclose(stdout); return 0;
}

jzoj6404. 【NOIP2019模拟11.04】B的更多相关文章

  1. 6423. 【NOIP2019模拟11.11】画

    题目描述 Description Input Output Sample Input 3 2 3 3 6 5 1 2 1 3 Sample Output 15 Data Constraint 题解 迫 ...

  2. 6407. 【NOIP2019模拟11.05】小 D 与随机

    题目描述 Description Input 第一行两个个整数 n,k. 之后 n -1 行,第 i 行两个整数 ui, vi, 表示一条树边. 保证输入的数据构成一棵树. Output 一行一个数表 ...

  3. 6402. 【NOIP2019模拟11.01】Cover(启发式合并)

    题目描述 Description 小 A 现在想用

  4. 6411. 【NOIP2019模拟11.06】上网

    题目描述 Description Input Output 若无解,则输出"Impossible". 否则第一行输出"Possible",第二行输出 n 个正整 ...

  5. 6409. 【NOIP2019模拟11.06】困难的图论(Tarjan求点双)

    题目描述 Description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在 ...

  6. 【NOIP2019模拟11.01】Game(贪心+线段树)

    Description: ​ 小 A 和小 B 在玩一个游戏,他们两个人每人有

  7. How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新)

    How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新) 重要通知: 最近开题报告已差不多告一段落, ...

  8. 安装qt5.3.2后,qtcreator在ubuntu 11.04无法启动的问题

    在官方网站下载.run文件安装后,qtcreator启动失败,然后找到命令行启动,失败原因如下: shr@shr-Sieyuan:~/Qt5.3.2/Tools/QtCreator/bin$ ./qt ...

  9. ubuntu 11.04 源 更新不了,全显示ign、404

    原文地址:http://blog.csdn.net/enjio/article/details/11603373   ubuntu 11.04 源 更新不了 分类: 开发相关2013-09-12 14 ...

随机推荐

  1. win7旗舰版C盘无写入权限别拒绝怎么办? 精选

    win7旗舰版C盘无写入权限别拒绝怎么办? 精选 https://zhidao.baidu.com/question/366277826663554972.html 浏览 42 次 1个回答 [热点话 ...

  2. springboot上传文件过大,全局异常捕获,客户端没有返回值

    最近在项目里进行全局异常处理时,上传文件超过配置大小,异常被捕获,但是接口直接报500错误,且没有任何返回值. 从后台报错日志来看,异常已经被全局异常处理捕获到了,并且也已经完成响应,为什么前端看不到 ...

  3. centos7 VM虚拟机在主机关机重启后,无法ping通

    解决办法 1.虚拟机的某些网络相关的服务没有启动,打开电脑的服务启动相关服务 2.打开虚拟机的虚拟网络设置,恢复默认设置即可 3.判定虚拟网卡的网关和centos的网关是否一致,如果不一致,改成一致, ...

  4. 【监控笔记】【2.3】扩展事件——慢查询SQL(执行超过3S的SQL)

    --sql server 2008及以上才支持,2012及以上才支持GUI界面 msdn 扩展事件:点击打开链接 [1]T-SQL实现 基于 rpc_completed(远程过程调用已完成时发生) 事 ...

  5. uva-796.critical links(连通图的桥)

    本题大意:求出一个无向图的桥的个数并且按照顺序输出所有桥. 本题思路:注意判重就行了,就是一个桥的裸题. 判重思路目前知道的有两种,第一种是哈希判重,第二种和邻接矩阵的优化一样,就是只存图的上半角或者 ...

  6. Hibernate 日期映射 条件查询

    1. hql: ...and accopt_time > ?" 2. query.setDate Query query = session.createQuery(hql); int ...

  7. uboot第二阶段分析1

    一. uboot第二阶段初识 1.1. uboot第二阶段应该做什么 a. 概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗.时钟),然后初始化DDR并且完成重定位. b.  ...

  8. HDU4471 Homework

    题目 预处理转移矩阵的\(2^k\). 然后把关键点按下标排序. 每次用类似于矩阵快速幂的方法求出两个关键点中间的转移矩阵. #include<bits/stdc++.h> using n ...

  9. PyCharm控制台python shell 和 IPython shell的切换

    1. IPython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许 ...

  10. Codeforces - 1202D - Print a 1337-string... - 构造

    https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...