jzoj6404. 【NOIP2019模拟11.04】B
题目描述
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的更多相关文章
- 6423. 【NOIP2019模拟11.11】画
题目描述 Description Input Output Sample Input 3 2 3 3 6 5 1 2 1 3 Sample Output 15 Data Constraint 题解 迫 ...
- 6407. 【NOIP2019模拟11.05】小 D 与随机
题目描述 Description Input 第一行两个个整数 n,k. 之后 n -1 行,第 i 行两个整数 ui, vi, 表示一条树边. 保证输入的数据构成一棵树. Output 一行一个数表 ...
- 6402. 【NOIP2019模拟11.01】Cover(启发式合并)
题目描述 Description 小 A 现在想用
- 6411. 【NOIP2019模拟11.06】上网
题目描述 Description Input Output 若无解,则输出"Impossible". 否则第一行输出"Possible",第二行输出 n 个正整 ...
- 6409. 【NOIP2019模拟11.06】困难的图论(Tarjan求点双)
题目描述 Description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在 ...
- 【NOIP2019模拟11.01】Game(贪心+线段树)
Description: 小 A 和小 B 在玩一个游戏,他们两个人每人有
- How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新)
How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新) 重要通知: 最近开题报告已差不多告一段落, ...
- 安装qt5.3.2后,qtcreator在ubuntu 11.04无法启动的问题
在官方网站下载.run文件安装后,qtcreator启动失败,然后找到命令行启动,失败原因如下: shr@shr-Sieyuan:~/Qt5.3.2/Tools/QtCreator/bin$ ./qt ...
- ubuntu 11.04 源 更新不了,全显示ign、404
原文地址:http://blog.csdn.net/enjio/article/details/11603373 ubuntu 11.04 源 更新不了 分类: 开发相关2013-09-12 14 ...
随机推荐
- python字符串的学习计划
python字符串有14小节内容, 计划7天学完吧(不知道能完成不) 今天依然是在禅道上写用例的一天 禅道上的用例,编写的时候比较方便 修改维护的时候,有点小麻烦(没有在Excel表中容易修改) D5 ...
- 【ABAP系列】SAP ABAP POPUP_TO_CONFIRM 弹出框总结
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP POPUP_T ...
- ubutnu同时安装OpenCV2和OpenCV3及contrib
1.OpenCV2源码安装 安装依赖项 sudo apt-get install build-essential //build-essential是c语言的开发包,包含了gcc make gdb和l ...
- 机器学习实战-Logistics回归
Logistics回归:实战,有两个特征X0,X1.100个样本,进行Logistics回归 1.导入数据 def load_data_set(): """ 加载数据集 ...
- 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)
Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...
- java基础/java调用shell命令和脚本
一.项目需求: 从某一机构获取证书,证书机构提供小工具,执行.sh脚本即可启动服务,本地调用该服务即可获取证书. 问题:linux服务器启动该服务,不能关闭.一旦关闭,服务即停止. 解决方案:java ...
- spring -boot定时任务 quartz 基于 JobDetailFactoryBean实现
这个有点小问题 尚未解决 后期优化 基于 JobDetailFactoryBean实现 依赖包 <dependencies> <dependency> <groupId ...
- 实验3&总结5
老师:lijin2019,助教:晨晨果 提交作业 实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is ...
- [Python3] 002 Python3 中常用的命名规则
目录 1. 什么可以用来命名? 1.1 老三样: 字母.数字.下划线 1.2 其他 2. 什么不能用来命名? Python3 中的"关键字" 3. 命名"小贴士" ...
- Y7000 安装ubuntu16.04.6 的tips :禁用nouveau 、Wifi 问题 、nvidia 驱动安装
由于最近要跑DeepLearning 所以在自己的Y7000上装一个Ubuntu ,自己碰了好多壁 写下来以防止自己忘掉以便后续再用! 配置:i7-8750H +GeForce GTX 1050Ti ...