省选专练【POI2015】Podzial naszyjnika
辣么这个题可是真难
首先利用Hash表判断是否可以用
T2则是利用并查集的siz
好难啊
枚举区间段可以用BIT
我实际就没懂
#include<bits/stdc++.h>
using namespace std;
typedef int INT;
#define int long long
inline void read(int &x){x=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}x*=f;
}
const int N=1e6+1000;
struct BIT{int T[N];inline int lowbit(int x){return x&(-x);}inline void update(int x,int val){while(x<N){T[x]+=val;x+=lowbit(x);}}inline int query(int x){if(x==-1) return 0;int ret=0;while(x){ret+=T[x];x-=lowbit(x);}return ret;}
}T;
struct Heap{priority_queue<int>In,Del;void Insert(int x){In.push(x);}void Delete(int x){Del.push(x);}int Top(){while(Del.size()&&In.top()==Del.top()){In.pop();Del.pop();};return (In.size()?In.top():0);}
}q;int pre[N]={};
int v[N]={};
int fa[N]={};
int n,m;
vector<int> A[N];
int pos[N]={};
int siz[N]={};
int find(int x){if(fa[x]==x)return x;else return fa[x]=find(fa[x]);
}
INT main(){read(n);read(m);for(int i=1;i<=n;i++){read(v[i]);fa[i]=i;A[v[i]].push_back(i);pos[i]=A[v[i]].size()-1;siz[i]=1;}fa[0]=1;fa[n+1]=n+1;siz[n+1]=1;int Up_Low=n;int sum=0;
// cout<<find(1);/*for(int i=1;i<n;i++){if(pos[i]) q.Delete(A[v[i]][pos[i]-1]);if(pos[i]==(int)A[v[i]].size()-1){for(int j=find(A[v[i]][0]);j<i;j=fa[j]) T.update(j,1),siz[find(j+1)]+=siz[j],fa[j]=fa[j+1];}else q.Insert(i);int k=q.Top();sum+=i-k-(T.query(i-1)-T.query(k-1));cout<<sum<<'\n';
// j=find(max(k,i-n/2));
// if(j<i) ans=min(ans,abs(n-2*(i-j)));
// j-=siz[j];
// if(j>=k) ans=min(ans,abs(n-2*(i-j)));}*/for(int i=1;i<n;i++){
// cout<<i<<'\n';if(pos[i])q.Delete(A[v[i]][pos[i]-1]);
// cout<<"234789478"<<'\n';
// cout<<A[v[i]].size()<<'\n';
// if(pos[i]==(int)A[v[i]].size()-1){
// cout<<"in"<<'\n';for(int j=find(A[v[i]][0]);j<i;j=fa[j]){
// cout<<j<<" k"<<'\n';T.update(j,1);siz[find(j+1)]+=siz[j];fa[j]=fa[j+1];
// cout<<"j= "<<j<<'\n';}}else q.Insert(i);int now=q.Top();
// cout<<"13"<<'\n';sum+=i-now-(T.query(i-1)-T.query(now-1));
// cout<<sum<<'\n';int idx=find(max(now,i-n/2));if(idx<i) Up_Low=min(Up_Low,abs(n-2*(i-idx)));idx-=siz[idx];if(idx>=now) Up_Low=min(Up_Low,abs(n-2*(i-idx)));}cout<<sum<<" "<<Up_Low;
}
转载于:https://www.cnblogs.com/Leo-JAM/p/10079259.html
省选专练【POI2015】Podzial naszyjnika相关推荐
- R6饮料AK赛(NOIP模拟赛)/省选专练HDU 5713 K个联通块
我好菜啊100+60+30 滚犊子吧,两天加起来才410搞个屁我一年前都可以考400 不说了,题毕竟比较难 T1还是水题但是比昨天难 这是一个开绝对值不等式的题. 根据对奇数和偶数的最优根的归纳一定有 ...
- 省选专练之文艺计算姬
"奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬. 文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一 ...
- 省选专练(学习)可持久化Trie树(BZOJ3261)
这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...
- 省选专练[CQOI2007]涂色
不好理解的DP 伪区间DP F(i,j)表示子串i-j实现的方式最小 当i=j时明显为1 当s[i]==s[j]时 这里是理解的重难点: 通过递归可知当你刷i的时候顺便刷到j就好了 然后就是标准的区间 ...
- 省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring
陈老师引入SAM的例题 求两个串的LCS 直接建一个串的SAM,并且把另外一个串放进去跳. 这个方法很经典! 几乎满足了所有两个串的公共串问题的所有解法 有巨子说这个跳是均摊Log的,我也不知道QwQ ...
- 省选专练之神仙贪心IOI2013Robert
[问题描述] 小沐把玩具扔在地板上,乱七八糟.庆幸的是,有一种特殊的机器人可以收拾玩具.不过他需要 确定哪个机器人去拣哪个玩具. 一共有 T 个玩具,整数 w[i]表示这个玩具的重量,整数 s[i]表 ...
- 省选专练(学习)AC自动机
我好菜啊 AC自动机都不会 AC自动机可以干什么: 用一个模板串匹配多个子串. 这便让AC自动机可以干许多KMP和Tri树不能干的事. AC自动机的构造 首先建立一颗Trie树. 其次利用KMP的思想 ...
- 省选专练[POI2005]SAM-Toy Cars
经典贪心 策略如下: 每次贪心让最需要的放下 易证正确 #include<bits/stdc++.h> using namespace std; const int N=1e6; inli ...
- 省选专练[NOI2008]志愿者招募
一类新式网络流问题 按时间为键值拆点 链式连边. 考点:流量平衡思想 考点出处:网络流24题最长K重区间覆盖问题 建边: 每一天向下一天连INF-A[i],0的边 每一次劳工用差分的方式建边INF,c ...
最新文章
- 1085 Perfect Sequence
- 结合Flink,国内自研,大规模实时动态认知图谱平台——AbutionGraph |博文精选
- Chem. Sci. | 3D深度生成模型进行基于结构的从头药物设计
- myeclipse10.7安装git插件
- js在客户端创建文件——ActiveXObject
- 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数
- 「Python」超简单!Python返回矩阵最大元素/最小值坐标,三行搞定!(更新:一行搞定!)
- linux第一次防火墙
- 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...
- P1032-字串变换【bfs】
- TensorFlow构建二维数据拟合模型(2)
- 【Druid】Druid简介
- Visual Studio 2019 16.2.2 发布
- Nmap 可能引起cisco路由器Crash
- RPM打包原理、示例、详解及备查( 转)
- mamp 扩展 php,Mac OS 下如何在 MAMP Pro 中安装php 扩展 zip
- 微管理——给你一个技术团队,你该怎么管
- 毕业设计结论计算机应用技术,计算机应用技术(网络、软件)毕业设计实施方案...
- html在表格输入文字不显示,Word表格中有部分格子内无法输入文字是怎么回事?...
- 使用阿里云/腾讯云的云服务器搭建邮箱服务器,避开25端口限制
热门文章
- Azure下通过Powreshell批量添加、删除VM终结点
- .net source code download
- Exchange Server 2013系统要求
- GCC 用 C++ 来编译(酷壳)
- winform窗体中嵌入显示Excel文件
- jupyter notebook运行的快捷键_AI Studio-Notebook基础使用教程(一)
- python爬虫网络中断_Python 爬虫总是超时中断?试试Tenacity重试模块
- 3-5Tensor创建编程实例
- 2018年计算机二级MySQL真题_2018年3月计算机二级考试MySQL真题及答案2
- mysql_install_db创建空库_MySQL数据库的初始化mysql_install_db