HDU 2852 KiKi's K-Number
权值线段树
#include <cstdio>
#include <cstring>
const int N=200000,M=220000;
int k,q,x,y,sum[M<<2],n;
char c;
void up(int x){sum[x]=sum[x<<1]+sum[x<<1|1];}
void update(int t,int num,int l,int r,int x){
if(l==r){
if(sum[x]+num<0)puts("No Elment!");
else sum[x]+=num;return;
}
int mid=(l+r)>>1;
if(t<=mid)update(t,num,l,mid,x<<1);
else update(t,num,mid+1,r,x<<1|1);
up(x);
}
int query(int L,int R,int l,int r,int x){
if(L<=l&&r<=R)return(sum[x]);
int mid=(l+r)>>1,tmp=0;
if(L<=mid)tmp+=query(L,R,l,mid,x<<1);
if(mid<R)tmp+=query(L,R,mid+1,r,x<<1|1);
return tmp;
}
int find(int k,int l,int r,int x){
int mid=(l+r)>>1,tmp=sum[x<<1|1];
if(l==r)return l;
if (k<=tmp) return find(k,mid+1,r,x<<1|1);
else return find(k-tmp,l,mid,x<<1);
}
int scan(int &x){
while(c=getchar(),c<'0'||c>'9');x=c-'0';
while(c=getchar(),c>='0'&&c<='9')x=x*10+c-'0';
}
int main(){
while(~scanf("%d",&n)){
for(int i=0;i<(M<<2);i++)sum[i]=0;
while(n--){
scan(q);
if(q==0){scan(x),update(x,1,1,N,1);}
if(q==1){scan(x),update(x,-1,1,N,1);}
if(q==2){
scan(x),scan(k);
if((y=query(x+1,N,1,N,1))<k)puts("Not Find!");
else printf("%d\n",find(y-k+1,1,N,1));
}
}
}
return 0;
}
分块
#include <cstdio>
int i,j,x,y,k,op,m,n,p[1000],pos[100005],a[100005],block,st[100005],en[100005];
int main(){
int size=0;
while(size*size<=100000)size++;
for(int i=1;i<=100000;i++)pos[i]=(i-1)/size+1;
for(block=pos[100000],i=1;i<=block;i++)en[i-1]=(st[i]=size*(i-1)+1)-1;en[block]=100000;
while(~scanf("%d",&n)){
for(int i=1;i<1000;i++)p[i]=0;
for(int i=1;i<=100000;i++)a[i]=0;
while(n--){
scanf("%d",&op);
if(op==0){scanf("%d",&x);a[x]++;p[pos[x]]++;}
if(op==1){scanf("%d",&x);if(!a[x])puts("No Elment!");else{a[x]--;p[pos[x]]--;}}
if(op==2){
scanf("%d%d",&x,&k);
for(i=x+1;i<=en[pos[x+1]];i++){k-=a[i];if(k<=0){printf("%d\n",i);break;}}
if(k>0){
for(i=pos[x+1]+1;i<=block;i++){k-=p[i];if(k<=0)break;}
if(k>0)puts("Not Find!");
else for(k+=p[i],j=st[i];j<=en[i];j++){k-=a[j];if(k<=0){printf("%d\n",j);break;}}
}
}
}
}return 0;
}
HDU 2852 KiKi's K-Number的更多相关文章
- hdu 2852 KiKi's K-Number (线段树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 2852 题意: 一个容器,三种操作: (1) 加入一个数 e (2) 删除一个数 e,如果不存在则输出 No Elment! (3) 查 ...
- HDU 2852 KiKi's K-Number 树状数组
先补充从n个数中求第k小数的理论知识........ 睡觉去~ ------------------------------------------又要睡觉的分割线------------------ ...
- HDU 2852 KiKi's K-Number(树状数组+二分搜索)
题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+ ...
- HDU 2852 KiKi's K-Number 树状数组 + 二分
一共最多才100000个数,并且数值范围0~100000. 树状数组 C[i] 记录数值为 i 的数有多少个. 删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在 ...
- HDU 2852 KiKi's K-Number 主席树
题意: 要求维护一个数据结构,支持下面三种操作: \(0 \, e\):插入一个值为\(e\)的元素 \(1 \, e\):删除一个值为\(e\)的元素 \(2 \, a \, k\):查询比\(a\ ...
- HDU 2852 KiKi's K-Number【 树状数组 二分 】
题意:给出m个操作,0:是增加一个数,add(x,1)1:是删除一个指定的数,这个是看sum(x) - sum(x-1)是否为0,为0的话则不存在,不为0的话,则add(x,-1)2:是查询比x大的数 ...
- HDU 2852 KiKi's K-Number(离线+树状数组)
题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...
- HDU.2147 kiki's game (博弈论 PN分析)
HDU.2147 kiki's game (博弈论 PN分析) 题意分析 简单的PN分析 博弈论快速入门 代码总览 #include <bits/stdc++.h> using names ...
- hdu 2147 kiki's game, 入门基础博弈
博弈的一些概念: 必败点(P点) : 前一个选手(Previous player)将取胜的位置称为必败点. 必胜点(N点) : 下一个选手(Next player)将取胜的位置称为必胜点. 必败(必胜 ...
随机推荐
- powerdesigner反向MySQL5.1数据库 生成ER图
我用的powerdesigner是15.1版本,数据库是MySQL5.1.57 (1)首先新建一个“PhysicalDataModel”类型的文件,然后点击“Database”->"C ...
- 转 --maven系列之一 简介
http://blog.csdn.net/jiuqiyuliang/article/details/41076215 [项目管理和构建]——Maven简介(一) 2015-01-31 21:27 68 ...
- nginx install lua module
#install luajit #http://luajit.org/download.html .tar.gz cd LuaJIT- make install PREFIX=/home/allen. ...
- 拔一拔 ExtJS 3.4 里你遇到的没遇到的 BUG(1)
本文从今天开始,我要做的就是不断的更新,不断的披露ExtJS 3.4的BUG并修复它.需要注意的是版本为3.4而不是4.0,因为4.0改动和变化比较大,所以不要对号入座. 嘿嘿,本人不怎么写东西,不过 ...
- Aprori算法[关联规则算法]
<meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <?p ...
- C# 中使用Newtonsoft.Json 处理JSON数据 绝对能用
当你搜到这篇文章是幸运的,因为之前我遇到这个问题 主要是 Newtonsoft.Json 版本不一 且网上各种文章 都是复制的 并不说明版本的问题 这里我就不说什么版本的问题了,总之必须使用我这个DL ...
- js静态属性和静态方法
啥也不说了,直接上代码...(就是这么任性) var Animal = function(){}; Animal.name = "dog"; var a = ...
- svn添加强制注释,pre-commit结合python
鉴于组内有些人在提交代码的时候并不写注释,而且没有固定格式,所以准备给svn提交时增加强制注释. 首先找到代码库里的hooks目录,正常建svn库的时候都有这个目录.进入hooks目录,找到pre-c ...
- java调用C++ DLL库方法
最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java ...
- MYSQL ERROR 1045 (28000): Access denied for user 'neeky'@'Nee' (using password: YES)
情况: mysql -h 192.168.1.7 -u neeky -p 本来这样就可以连接上mysql服务的了, 可是它会报这个错“ERROR 1045 (28000): Access denied ...