辣么这个题可是真难

首先利用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相关推荐

  1. R6饮料AK赛(NOIP模拟赛)/省选专练HDU 5713 K个联通块

    我好菜啊100+60+30 滚犊子吧,两天加起来才410搞个屁我一年前都可以考400 不说了,题毕竟比较难 T1还是水题但是比昨天难 这是一个开绝对值不等式的题. 根据对奇数和偶数的最优根的归纳一定有 ...

  2. 省选专练之文艺计算姬

    "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬. 文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一 ...

  3. 省选专练(学习)可持久化Trie树(BZOJ3261)

    这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...

  4. 省选专练[CQOI2007]涂色

    不好理解的DP 伪区间DP F(i,j)表示子串i-j实现的方式最小 当i=j时明显为1 当s[i]==s[j]时 这里是理解的重难点: 通过递归可知当你刷i的时候顺便刷到j就好了 然后就是标准的区间 ...

  5. 省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring

    陈老师引入SAM的例题 求两个串的LCS 直接建一个串的SAM,并且把另外一个串放进去跳. 这个方法很经典! 几乎满足了所有两个串的公共串问题的所有解法 有巨子说这个跳是均摊Log的,我也不知道QwQ ...

  6. 省选专练之神仙贪心IOI2013Robert

    [问题描述] 小沐把玩具扔在地板上,乱七八糟.庆幸的是,有一种特殊的机器人可以收拾玩具.不过他需要 确定哪个机器人去拣哪个玩具. 一共有 T 个玩具,整数 w[i]表示这个玩具的重量,整数 s[i]表 ...

  7. 省选专练(学习)AC自动机

    我好菜啊 AC自动机都不会 AC自动机可以干什么: 用一个模板串匹配多个子串. 这便让AC自动机可以干许多KMP和Tri树不能干的事. AC自动机的构造 首先建立一颗Trie树. 其次利用KMP的思想 ...

  8. 省选专练[POI2005]SAM-Toy Cars

    经典贪心 策略如下: 每次贪心让最需要的放下 易证正确 #include<bits/stdc++.h> using namespace std; const int N=1e6; inli ...

  9. 省选专练[NOI2008]志愿者招募

    一类新式网络流问题 按时间为键值拆点 链式连边. 考点:流量平衡思想 考点出处:网络流24题最长K重区间覆盖问题 建边: 每一天向下一天连INF-A[i],0的边 每一次劳工用差分的方式建边INF,c ...

最新文章

  1. 1085 Perfect Sequence
  2. 结合Flink,国内自研,大规模实时动态认知图谱平台——AbutionGraph |博文精选
  3. Chem. Sci. | 3D深度生成模型进行基于结构的从头药物设计
  4. myeclipse10.7安装git插件
  5. js在客户端创建文件——ActiveXObject
  6. 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数
  7. 「Python」超简单!Python返回矩阵最大元素/最小值坐标,三行搞定!(更新:一行搞定!)
  8. linux第一次防火墙
  9. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...
  10. P1032-字串变换【bfs】
  11. TensorFlow构建二维数据拟合模型(2)
  12. 【Druid】Druid简介
  13. Visual Studio 2019 16.2.2 发布
  14. Nmap 可能引起cisco路由器Crash
  15. RPM打包原理、示例、详解及备查( 转)
  16. mamp 扩展 php,Mac OS 下如何在 MAMP Pro 中安装php 扩展 zip
  17. 微管理——给你一个技术团队,你该怎么管
  18. 毕业设计结论计算机应用技术,计算机应用技术(网络、软件)毕业设计实施方案...
  19. html在表格输入文字不显示,Word表格中有部分格子内无法输入文字是怎么回事?...
  20. 使用阿里云/腾讯云的云服务器搭建邮箱服务器,避开25端口限制

热门文章

  1. Azure下通过Powreshell批量添加、删除VM终结点
  2. .net source code download
  3. Exchange Server 2013系统要求
  4. GCC 用 C++ 来编译(酷壳)
  5. winform窗体中嵌入显示Excel文件
  6. jupyter notebook运行的快捷键_AI Studio-Notebook基础使用教程(一)
  7. python爬虫网络中断_Python 爬虫总是超时中断?试试Tenacity重试模块
  8. 3-5Tensor创建编程实例
  9. 2018年计算机二级MySQL真题_2018年3月计算机二级考试MySQL真题及答案2
  10. mysql_install_db创建空库_MySQL数据库的初始化mysql_install_db