题目描述



分析

这道题比较关键的一点就是要看出最终牌数的种类数不会超过 \(\sqrt{n}\) 种

知道了这个性质我们就可以用 \(vector\) 维护一个有序的序列

\(vector\) 中存放牌数的大小和有多少堆这样的牌

每次二分插入和删除即可

时间复杂度 \(O(m\sqrt{n})\)

代码

#include<cstdio>
#include<vector>
#define rg register
inline int read(){
rg int x=0,fh=1;
rg char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') fh=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*fh;
}
const int maxn=1e6+5;
int n,m,tp,siz[maxn],sum[maxn],fa[maxn],sta[maxn];
int zhao(int xx){
if(xx==fa[xx]) return xx;
return fa[xx]=zhao(fa[xx]);
}
struct jie{
int val,cnt;
jie(){}
jie(int aa,int bb){
val=aa,cnt=bb;
}
};
std::vector<jie> g;
int ef(int val){
rg int l=1,r=g.size(),mids;
while(l<=r){
mids=(l+r)>>1;
if(g[mids-1].val>=val) r=mids-1;
else l=mids+1;
}
return l-1;
}
int main(){
n=read(),m=read();
for(rg int i=1;i<=n;i++){
siz[i]=1;
fa[i]=i;
}
g.insert(g.begin(),jie(1,n));
rg int aa,bb,cc,dd,ee,ff;
rg long long ans=0;
for(rg int i=1;i<=m;i++){
aa=read();
if(aa==1){
bb=read(),cc=read();
dd=zhao(bb),ee=zhao(cc);
if(dd==ee) continue;
ff=ef(siz[dd]);
g[ff].cnt--;
if(g[ff].cnt==0) g.erase(g.begin()+ff);
ff=ef(siz[ee]);
g[ff].cnt--;
if(g[ff].cnt==0) g.erase(g.begin()+ff);
siz[dd]+=siz[ee];
siz[ee]=0;
if(g[g.size()-1].val<siz[dd]){
g.push_back(jie(siz[dd],1));
} else {
ff=ef(siz[dd]);
if(g[ff].val==siz[dd]) g[ff].cnt++;
else g.insert(g.begin()+ff,jie(siz[dd],1));
}
fa[ee]=dd;
} else {
bb=read();
ans=0;
tp=g.size();
for(rg int j=1;j<=tp;j++){
sum[j]=sum[j-1]+g[j-1].cnt;
sta[j]=g[j-1].val;
}
if(bb==0){
ans+=1LL*(sum[tp]-1)*sum[tp]/2LL;
} else {
ee=1,ff=1;
while(ee<=tp){
while(sta[ff]-sta[ee]<bb && ff<=tp) ff++;
if(sta[ff]-sta[ee]<bb || ff>tp) break;
ans+=1LL*(sum[ee]-sum[ee-1])*(sum[tp]-sum[ff-1]);
ee++;
}
}
printf("%lld\n",ans);
}
}
return 0;
}

晚间测试13 A. Dove 打扑克 vector +模拟的更多相关文章

  1. 「10.28」Dove 打扑克(链表)·Cicada 与排序(概率)·Cicada 拿衣服(各种数据结构)

    A. Dove 打扑克 考场思考半天线段树树状数组,没有什么想法 打完暴力后突然想到此题用链表实现会很快. 因为只有$n$堆,所以设最多有$x$个不同的堆数,那么$x\times (x-1)/2==n ...

  2. uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟

    挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...

  3. UVa 12100 Printer Queue(queue或者vector模拟队列)

    The only printer in the computer science students' union is experiencing an extremely heavy workload ...

  4. hdu 4841 圆桌问题(用vector模拟约瑟夫环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    M ...

  5. 利用C++ STL的vector模拟邻接表的代码

    关于vector的介绍请看 https://www.cnblogs.com/zsq1993/p/5929806.html https://zh.cppreference.com/w/cpp/conta ...

  6. [UPC10525]:Dove打扑克(暴力+模拟)

    题目描述 $Dove$和$Cicada$是好朋友,他们经常在一起打扑克来消遣时光,但是他们打的扑克有不同的玩法. 最开始时,牌桌上会有$n$个牌堆,每个牌堆有且仅有一张牌,第$i$个牌堆里里里那个扑克 ...

  7. 2019.8.5 NOIP模拟测试13 反思总结【已更新完毕】

    还没改完题,先留个坑. 放一下AC了的代码,其他东西之后说… 改完了 快下课了先扔代码 跑了跑了 思路慢慢写 来补完了[x 刚刚才发现自己打错了标题 这次考试挺爆炸的XD除了T3老老实实打暴力拿了52 ...

  8. NOIP模拟测试13

    考得还算可以,T3还有提升空间(没看清题&&样例没过 拿了4分). 期望得分:80+40+0=120 实际得分:80+85+4=169 一脸黑线.....是数据比较水的原因,T2分都比 ...

  9. 8.5 NOIP模拟测试13 矩阵游戏+跳房子+优美序列

    T1矩阵游戏 数学题.首先这一列这一行先乘还是后乘对最后答案没有影响.a[i][j]表示矩阵中原始的值,h[i]表示i行的累乘,l[i]表示i列的累乘.易得ans=Σa[i][j]*h[i]*l[i] ...

随机推荐

  1. vsCode 搭建Java开发环境

    1.安装扩展 Java Extension Pack Spring Boot Extension Pack 2.配置Maven 打开设置 搜索maven 找到并打开  在 settings.json ...

  2. Android Widget开发过程中的一些问题汇总

    一.基本实现要点 布局文件 配置文件 控制文件 AndroidManifest.xml

  3. makefile实验二 对目标的深入理解 以及rebuild build clean的实现

    (一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworl ...

  4. 基础篇:深入解析JAVA注解机制

    目录 java实现注解的底层原理和概念 五种元注解详解 使用动态代理机制处理注解 spring.AOP和注解机制 (题外)@FunctionalInterface原理介绍 欢迎指正文中错误 关注公众号 ...

  5. “酒香也怕巷子深” Smartflow-Sharp 工作流

    导语 老话说得好,"酒香不怕巷子深"可是我又不是什么大咖,写得再好也没人知道.所以我今天准备再写写我的工作流组件,写得不好还请大家见谅.写文章对于我来说,有点感觉"茶壶里 ...

  6. 怎么写一个Activity

    a.新建一个类继承Actitvity b.重写oncreate方法 setContentView(R.layout.XXX);//设置布局文件 c.注册activity <activity an ...

  7. laravel 500错误的一种可能

    报这个错误,我一度认为,再加上,百度,大家都说是配置有问题,经过我不断地问我学长,结果就是一个小错误,简直太丢人了. 居然是少了一个括号的问题,自闭了

  8. 用pChart生成雷达图图片

    需求 :由于工作需要,需要在一张背景图上添加这一张雷达图,之后图片可以在微信中长按保存.所以说我必须生成一张带有雷达图的图片第一反应是用百度echars雷达图做动态显示,之后截图.考虑到工作量和效率, ...

  9. linux CentOS7 防火墙操作

    1, 查看防火墙状态: firewall-cmd --state systemctl status firewalld.service 2, 开启防火墙: systemctl start firewa ...

  10. 发布TrajStat 1.4.4

    发布TrajStat 1.4.4 (MeteoInfo Java版插件),在PSCF和CWT源区分析中增加了依据格点中的气团轨迹条数为权重进行结果处理的功能.之前的仅有按照轨迹节点数目进行权重处理的功 ...