这 题 说 的 是 给 了 一 个 K—NN    每次查询离loc 最近的k个数 然后将这k个数的权值加起来除以k 赋值给 loc 这个位置上的 权值

 我说说 我的做法 假如 查询的是loc 这个位置 k 个 ,然后 就让 L=1 R= loc 对于每个 二分 的 mid  假设mid 是这k个数最左的那个的下标 然后对于每个最左的下标 我们可以知道 这k 个数的最右点在哪里 然后就判断 这个区间是否要左移 或者右移 左移 R=mid 右移 L=mid+1 然后不断的去调整 找到最后的L和R后用树状数组去维护就好了
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
typedef int ll;
const int max_n =;
const int INF =(1e9)*;
struct point{
ll loc,num;
double val;
bool operator <(const point A)const{
return loc<A.loc;
}
}P[max_n];
int n,m;
double C[max_n];
int lowbit(int x){
return x&(-x);
}
void add(int x, double v){
while(x<=n){
C[x]+=v;
x+=lowbit(x);
}
}
double sum(int x){
double ans=;
while(x>){
ans+=C[x];
x-=lowbit(x);
}
return ans;
}
int id[max_n];
ll dist[max_n];
void binser(int &L, int &R,int loc, int num){
L=max(,loc-num);
R= loc;
ll S1,nu,S2;
while(L<R){
int mid =(R+L)/;
S1=dist[loc]-dist[mid];
nu = num-(loc-mid)+loc;
if(nu<loc){
L=mid+; continue;
}
if(nu>n){
R=mid;continue;
}
S2=dist[nu]-dist[loc];
if(S1>S2){
L=mid+;
}else {
R=mid;
}
}
L = min(L,loc);
R = num - ( loc - L ) + loc ;
L = min( L + , loc );
R = max( loc , R - );
int ge = R-loc + loc - L;
while(ge!=num){
if(R>=n||(L>&&dist[loc]-dist[L-]<dist[R+]-dist[loc])
||(L>&&dist[loc]-dist[L-]==dist[R+]-dist[loc]&&P[L-].num<P[R+].num))
L--;
else R++;
ge++;
}
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--){
for(int i=; i<=n; i++)
C[i]=0.0;
scanf("%d%d",&n,&m);
for(int i =; i<=n; i++){
ll loc;
double val;
scanf("%d%lf",&loc,&val);
P[i].loc=loc;
P[i].num=i;
P[i].val=val;
}
sort( P + , P + n + );
for(int i=; i <= n ;++i){
id[ P[i].num ] = i;
dist[ i ] = P[ i ].loc;
add( i , P[i].val );
}
dist[n+]=INF;
double ans=;
double S;
while(m--){
int loc, k;
scanf("%d%d",&loc,&k);
if(loc<||k<||k>=n)while(true);
loc=id[loc];
int L,R;
binser(L,R,loc,k);
add(loc,-P[loc].val);
S =sum(R)-sum(L-);
S=S/k;
ans=ans+S;
add(loc,S);
P[loc].val=S;
}
printf("%.3f\n",ans);
}
return ;
}

hdu5021 树状数组+二分的更多相关文章

  1. POJ 2828 Buy Tickets (线段树 or 树状数组+二分)

    题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...

  2. TZOJ 4602 高桥和低桥(二分或树状数组+二分)

    描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...

  3. POJ 2182 Lost Cows 【树状数组+二分】

    题目链接:http://poj.org/problem?id=2182 Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  4. 树状数组+二分||线段树 HDOJ 5493 Queue

    题目传送门 题意:已知每个人的独一无二的身高以及排在他前面或者后面比他高的人数,问身高字典序最小的排法 分析:首先对身高从矮到高排序,那么可以知道每个人有多少人的身高比他高,那么取较小值(k[i], ...

  5. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  6. The Stream of Corning 2( 权值线段树/(树状数组+二分) )

    题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...

  7. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  8. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  9. HDU 2852 KiKi's K-Number 树状数组 + 二分

    一共最多才100000个数,并且数值范围0~100000. 树状数组 C[i] 记录数值为 i 的数有多少个. 删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在 ...

随机推荐

  1. php导出excel(xls或xlsx)(解决长数字显示问题)

    1)demo $titles = array('订单号','商品结算码','合同号','供应商名称','专柜','商品名称','商品货号','商品单价','商品总价','供应商结算金额','商品数量' ...

  2. CentOS安装最新版的火狐

    1. 下载最新版的火狐 Firefox-latest.tar.bz2 2.yum -y remove firefox 3.rm -rf /usr/lib/firefox      ##64位的机器为l ...

  3. combobox组合框

    最近在改BUG的时候发现,combobox组合框如果选择的是Dropdown模式在初始化combobox对象时候有如下操作 1.SetDlgItemInt(IDC_WB_FONTSIZECOMBOX, ...

  4. Android App签名打包 与 SDK开发文档

    Android App签名打包签名的意义1.为了保证每个程序开发者的合法权益2.放置部分人通过使用相同的Package Name来混淆替换已经安装的程序,从而出现一些恶意篡改3.保证我们每次发布的版本 ...

  5. 跳表 SkipList

    跳表是平衡树的一种替代的数据结构,和红黑树不同,跳表对树的平衡的实现是基于一种随机化的算法,这样就使得跳表的插入和删除的工作比较简单.     跳表是一种复杂的链表,在简单链表的节点信息之上又增加了额 ...

  6. 注册和删除Apache服务器的方法

    Apache服务器的安装和卸载方法 下载Apache安装包   将Apache文件夹存在桌面或其他盘,输入cmd打开命令提示行   安装步骤:进入Apache安装目录下的bin目录: cd C:\Us ...

  7. virgo-tomcat访问日志的详细配置

    Tomcat 日志信息分为两类:1.运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息.2.访问日志信息,它记录的访问的时间.IP.访问的资料等相关信息. 关于tomcat访问日志的产 ...

  8. java类的成员初始化顺序和初始化块知识

    java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...

  9. oracle的cursor

    oracle的cursor 转自:http://www.cnblogs.com/shengtianlong/archive/2010/12/31/1922767.html 1,什么是游标? ①从表中检 ...

  10. JavaORM框架之Mybatis篇(Ibatis)

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...