bzoj5103: [POI2018]Ró?norodno
Description
Input
Output
对每种颜色分别算贡献,一个点对一个边长k的正方形内每个位置贡献1,但同色贡献只算一次,这是一个正方形求并问题。考虑扫描线,由于边长固定,每个正方形进入和离开扫描线时,至多改变扫描线一个区间的状态,求这个区间的端点,则需要在扫描线上查前趋后继,可以用线段树维护。
#include<bits/stdc++.h>
typedef unsigned int u32;
const u32 A=-;
const int N=1e5+,M=;
char ib[M*M*],*ip=ib;
inline int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
u32 bs[M][][M/+],t0[N][],t1[N][M/+];
int n,m,k,mx,a[M][M],s[M][M],pv[N];
long long sum;
inline void _xor(u32*a,int x){a[x>>]^=<<x;}
inline int _get(u32*a,int x){return a[x>>]>>x&;}
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
#define ctz(x) __builtin_ctz(x)
#define clz(x) (31^__builtin_clz(x))
inline void cal(int x,int y,int w,int sgn){
int L=-,R=,p1=y>>,p2=y>>,p3;
u32 v;
v=t1[w][p1]&A<<y;
if(v)R=p1<<|ctz(v);
else{
v=t0[w][p2]&A<<p1<<;
if(v){
p3=p2<<|ctz(v);
R=p3<<|ctz(t1[w][p3]);
}else for(int i=p2+;i<;++i)if(t0[w][i]){
p3=i<<|ctz(t0[w][i]);
R=p3<<|ctz(t1[w][p3]);
break;
}
}
v=t1[w][p1]&A>>(^y);
if(v)L=p1<<|clz(v);
else{
v=t0[w][p2]&A>>(^p1)>>;
if(v){
p3=p2<<|clz(v);
L=p3<<|clz(t1[w][p3]);
}else for(int i=p2-;i>=;--i)if(t0[w][i]){
p3=i<<|clz(t0[w][i]);
L=p3<<|clz(t1[w][p3]);
break;
}
} L=max(y,L+k);
R=min(min(m+,y+k),R);
if(L<R)s[x][L]+=sgn,s[x][R]-=sgn;
}
inline void del(int x,int y,int w){
_xor(t1[w],y);
if(!t1[w][y>>])_xor(t0[w],y>>);
cal(x,y,w,-);
}
inline void ins(int x,int y,int w){
cal(x,y,w,);
if(!t1[w][y>>])_xor(t0[w],y>>);
_xor(t1[w],y);
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_();m=_();k=_();
for(int i=;i<=n;++i){
for(int j=;j<=m;++j){
a[i][j]=_();
}
}
for(int j=;j<=m;++j){
for(int i=;i<=n;++i){
int x=a[i][j],&y=pv[x];
if(y&&y>i-k)_xor(bs[y][],j),_xor(bs[i][],j);
y=i;
}
for(int i=;i<=n;++i)pv[a[i][j]]=;
}
for(int i=;i<=n;++i){
for(int j=;j<=m;++j){
if(i>k&&!_get(bs[i-k][],j))del(i,j,a[i-k][j]);
if(!_get(bs[i][],j))ins(i,j,a[i][j]);
}
}
for(int i=;i<=n;++i){
for(int j=;j<=m;++j)s[i][j]+=s[i][j-];
for(int j=;j<=m;++j)s[i][j]+=s[i-][j];
if(i>=k)for(int j=k;j<=m;++j){
sum+=s[i][j];
if(s[i][j]>mx)mx=s[i][j];
}
}
printf("%d %lld\n",mx,sum);
return ;
}
bzoj5103: [POI2018]Ró?norodno的更多相关文章
- BZOJ5103 : [POI2018]Róznorodno
从上到下枚举上下底边,那么涉及两行的添加和删除. 首先预处理出对于每一列,每个位置添加和删除时,是否会对往下$k$个里出现这个颜色造成影响. 然后对于每种颜色维护一个长度为$m$的bitset,表示哪 ...
- zapewnia stale poprawiając relacje związane
W porównaniu do LG5, ta http://www.butyrunning.com/lunarestoa-2-m%C3%84%C2%99skie-c-2_70_71.html kon ...
- [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 利用python进行数据分析2_数据采集与操作
txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
- bzoj千题计划249:bzoj5100: [POI2018]Plan metra
http://www.lydsy.com/JudgeOnline/problem.php?id=5100 1.找到d1[i]+dn[i] 最小的点,作为1到n链上的点 2.令链长为D,若abs(d1[ ...
- POI2018
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量 ...
- 【BZOJ5102】[POI2018]Prawnicy 堆
[BZOJ5102][POI2018]Prawnicy Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大 ...
- 【BZOJ5099】[POI2018]Pionek 几何+双指针
[BZOJ5099][POI2018]Pionek Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只 ...
随机推荐
- day048 BOM和DOM
BOM Browser Object Model(文档对象模型) > window对象 1.alert 弹出带有提示和一个确认按钮的警示框 2.confirm 弹出带有一 ...
- Docker容器中找不到vim命令
docker容器中,有的并未安装vi和vim,输入命令vim,会提示vim: command not found(如下图).此时我们就要安装vi命令 执行命令:apt-get update apt-g ...
- laravel5.2加载自定义的aliyun扩展包
把文件夹加载进来 在 app.php里面注册 serviceprovider 在 app/filesystems.php 里面 加入相关的配置 把 cloud的值 改成对应的扩展 在.env文件里面完 ...
- Python编程高级特性--迭代器
一.简单介绍 直接作用于for循环的数据类型有以下几种: 集合数据类型: list 例如:list = ["yuhaohao", "lisheng", &quo ...
- LAMP架构(三)
第十九课 LAMP架构(三) 目录 一.配置防盗链 二.访问控制Directory 三.访问控制FilesMatch 四.限定某个目录禁止解析php 五.限制user_agent 六.php相关配置 ...
- UVALive - 4223,hdu2962(简单dijkstra)
Trucking Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- VC++封装的时间类
一.使用方法 首先要在工程中加入TimeNow.cpp和TimeNow.h文件 1.把.cpp与.h文件放在放在工程文件夹. 2.项目(progect)-->属性(properties)--&g ...
- 22.一个球从100m高度自由下落,每次落地后返跳回原高度的一半,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。
#include <stdio.h> #include <stdlib.h> int main() { ,hn=sn/; int i; ;i<=;i++) //注意i是从 ...
- LINUX系统配置
LINUX系统配置 Linux 安装jdk方法; Linux Tomcat 安装与配置 Linux redis 安装与配置 (例1) Linux redis安装配置(例2) NGINX 安装 Linu ...
- video自动填充满父级元素
想要video能自动填充慢父div的大小,只要给video标签加上style="width= 100%; height=100%; object-fit: fill"即可. obj ...