POJ-2985-The k-th Largest Group
来源:互联网 发布:python快速排序算法 编辑:程序博客网 时间:2024/04/30 04:14
第一次用树状数组求第k大值,其实思想就是统计比现在小的个数,然后用二分进行查找, 感觉比划分树简单多了
代码:
#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=200010;int n,m,t[maxn],p[maxn],num[maxn];int find(int x){ if(p[x]==-1)return x; return p[x]=find(p[x]);}int lowbit(int x){ return x&(-x);}void Update(int i,int val){ for(;i<=n;t[i]+=val,i+=lowbit(i));}int Sum(int i){ int ans=0; for(;i>0;ans+=t[i],i-=lowbit(i)); return ans;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) {memset(p,-1,sizeof(p));for(int i=1;i<=n;i++) num[i]=1;Update(1,n);int res=n;while(m--){ int op; scanf("%d",&op); if(op==0) {int a,b;scanf("%d%d",&a,&b);int x=find(a);int y=find(b);if(x==y) continue;Update(num[x],-1);Update(num[y],-1);num[y]+=num[x];Update(num[y],1);p[x]=y;res--; } else {int k,l=1,r=n,ans;scanf("%d",&k);k=res-k+1;while(l<=r){ int mid=(l+r)>>1; if(Sum(mid)>=k)r=mid-1; elsel=mid+1;}printf("%d\n",l); }} } return 0;}
- POJ 2985 The k-th Largest Group
- Poj 2985 The k-th Largest Group
- POJ-2985-The k-th Largest Group
- POJ 2985 The k-th Largest Group
- The k-th Largest Group POJ
- poj 2985 The k-th Largest Group 并查集+树状数组求第k大
- poj 2985 并查集+线段树 线段树求第k大数 The k-th Largest Group
- POJ 2985The k-th Largest Group 线段树求整体第K大
- POJ 2985:The k-th Largest Group 树状数组求第K小的元素
- POJ 2985 The k-th Largest Group 第k大数 Treap / 树状数组 + 并查集
- poj 2985 The k-th Largest Group/并查集+sbt
- POJ 2985 The k-th Largest Group [并差集+treap]
- poj 2985 The k-th Largest Group(线段树+并查集)
- poj 2985 The k-th Largest Group (Treap+并查集)
- POJ2985 The k-th Largest Group
- POJ2985 The k-th Largest Group
- POJ2985 The k-th Largest Group(Splay)
- [Treap]poj2985 The k-th Largest Group
- PHP中set_time_limit
- 智慧可以求生
- 挂起一个进程
- sqlserver是用触发器来实现 insert 后 返回自增 行的id号
- VS2008学习
- POJ-2985-The k-th Largest Group
- UML中的泛化,关联,依赖
- maven自定义db2的jar包
- repeater 绑定显示时间的不同格式
- 一只苹果
- STL vector用法介绍
- 以NATS为主线的CloudFoundry原理
- java生成32位随机ID
- SRM 578 Div II Level Three: WolfInZooDivTwo,Dynamic Programming,求教!