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条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只 ...
随机推荐
- Redis for linux安装配置之—-源码安装
一‘redis单实例安装配置1.下载redis源码压缩包,并将其上传至服务器/usr/local2.解压redis源码压缩包 # tar -xzvf redis-3.2.12.tar.gz3.进入r ...
- systemctl用法及其语法
1.确定是否安装systemd及其版本 # systemctl –version 2.确定systemd和systemctl的二进制文件和库文件的安装位置 # whereis systemd # wh ...
- 为什么会出现container、injection技术?发展历史及未来发展趋势
container 原因: 随着软件开发的发展,相比于早期的集中式应用部署方式,现在的应用基本都是采用分布式的部署方式,一个应用可能包含多种服务或多个模块,因此多种服务可能部署在多种环境中,如虚拟服务 ...
- labeled statement:标签语句
foo: for (var i=0; i< 5; i++) { for (var j=0; j<5; j++) { if ( i == j ) { // 跳到 foo 的下一个循环 // ...
- [Codeforces778E]Selling Numbers
Problem 给一个由问号和数字组成的数字串A(问号表示任一数字). 再给定n个数字Bi,和0~9的数字的价值. F(x)表示x各个位数上的价值和.问A为何值时,sum(F(Bi+A))的值最大为多 ...
- Python语言:下载上证股票数据程序
from urllib.request import urlretrieve f = open('SHA.csv', 'r')for line in f: data = line.split(',') ...
- 组队项目,Main队伍
本小组经过讨论,决定做的项目为----厨娘 分组情况: 1.界面设计:胡骏 2.前段,界面代码实现:梅庆 3.后台.逻辑处理:唐正奎.张军洪.袁成杰 4.数据库的建立与存写:张军洪.蒋利平 厨娘——需 ...
- THML
结构<!DOCTYE html> <html> <head> <meta charset="UTF-8> <titie>< ...
- 阿里的maven镜像仓库,eclipse中使用maven下载jar包的时候提升速度
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...
- html 刷新重载方法汇总
一.javascript页面刷新重载的方法: <a href="javascript:location.reload();">点击重新载入页面</a> &l ...