一、题目

POJ2886

二、分析

  这个题目吧,开始没读懂,做的时候也没懂,WA的时候懂了。假设是第p个出圈的人有一个对应的因子个数$F(p)$,那么,题目求的就是这个$F(p)$最大的对应的人。

  1.首先要对所有$F(p)$值进行预处理打表。因为多次询问。

  2.每次都会有一个人出圈,那么为了能够每次方便的查到(新圈)第K个人的下标,需要对出圈的人进行处理,这里可以用树状数组,表示第pos个位置前还有多少个人在,如果不在,就对树状数组进行维护。需要注意的是树状数组需要初始化,即开始的时候每个人都是在自己的位置上的。

  3.确定K,确定K的时候,思路比较绕,画个图就明白了。总结一下,就是对于当前位置pos,对应的是当前圈的第K个人,那么下一时刻,他就出圈了。

  如果是他手里的数字是正,那么相当于从旧圈的第K-1个人开始考虑。

  如果手里的数字是负,因为新圈里,第K个人的位置被前一个圈的 K + 1个人顶替了,所以不用管。

  然后取余就可以了,注意细节就行。

  4.第K个人确定了,那么就需要找了,利用BIT的求和直接二分找就可以了。这里要注意找的是$F(p)$最大值对应的人。(最开始就是没注意这个WA了好多次)

三、AC代码

 #include <cstdio>
#include <iostream>
#include <cstring> using namespace std; const int MAXN = 5e5 + ; struct Node
{
char s[];
int num;
}Data[MAXN]; int BIT[MAXN];
int Prime[MAXN] = {};
int N, K, Ans, ID; void getPrime()
{
for(int i = ; i < MAXN; i++)
{
for(int j = i; j < MAXN; j += i)
{
Prime[j]++;
}
}
} void add(int x, int v)
{
while(x <= MAXN)
{
BIT[x] += v;
x += x & -x;
}
} int sum(int x)
{
int ans = ;
while(x)
{
ans += BIT[x];
x -= x & -x;
}
return ans;
} int getPos(int t)
{
int left = , right = N, mid;
while(left + < right)
{
mid = (left + right) >> ;
if(sum(mid) < t)
left = mid;
else
right = mid;
}
return right;
} void solve()
{
int pos, temp;
for(int i = N - ; i > ; i--)
{
pos = getPos(K);
add(pos, -);
temp = Prime[N - i];
if(Ans < temp)
{
Ans = temp;
ID = pos;
}
if(Data[pos].num > )
{
K--;
}
K += Data[pos].num;
K = (K%i + i) % i;
if(K == )
K = i;
}
K = getPos(K);
temp = Prime[N];
if(Ans < temp)
{
Ans = temp;
ID = K;
} } int main()
{
//freopen("input.txt", "r", stdin);
getPrime();
while(scanf("%d %d", &N, &K) != EOF)
{
memset(BIT, , sizeof(BIT));
for(int i = ; i <= N; i++)
{
add(i, );
scanf("%s %d", Data[i].s, &Data[i].num);
}
Ans = ;
solve();
printf("%s %d\n", Data[ID].s, Ans);
}
return ;
}

POJ_2886 Who Gets the Most Candies? 【二分+树状数组】的更多相关文章

  1. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

  2. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  3. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

  4. bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某 ...

  5. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  6. zoj-3963 Heap Partition(贪心+二分+树状数组)

    题目链接: Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence ...

  7. 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组

    题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...

  8. 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组

    题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...

  9. [ZJOI2006]书架(二分+树状数组)

    这题90%以上的人做法为裸的平衡树,实际上根本没必要还常数大,最好的方法是二分+树状数组.具体做法是,开3倍内存,初始把中间n位赋值为1.对于每个操作:1&2.删除该位,将其丢在头/尾(开三倍 ...

随机推荐

  1. .net正则查询

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  2. console对象的理解

    console对象代表浏览器的JS控制台,虽然不是标准,但已经成为事实的标准 console对象的作用 a.显示代码运行错误信息 b.提供一个命令行接口,用来与网页互动 console对象拥有很多方法 ...

  3. 并查集 - 1611 The Suspects

    题目地址: http://poj.org/problem?id=1611 分析: - 数据结构 - parent[x] 表示 x 元素的父节点位置. - rank[x] 记录x的子链的长度, 以便在合 ...

  4. mongodb ---- findAndModify 写法

    db.coll.findAndModify({ query:{x:"ggg"}, update:{$set:{"x":"gggg"}}, f ...

  5. UVa 11324 The Largest Clique (强连通分量+DP)

    题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u. 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩 ...

  6. Reactor模式和NIO(转载二)

    本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...

  7. Java多线程设计模式(四)

    目录(?)[-] Future Pattern Two-Phase Termination Pattern Thread-Specific Storage Pattern Active Object ...

  8. ViewResolver 视图解析器

    pringMVC 视图解析器 前言 在前一篇博客中讲了 SpringMVC 的Controller 控制器,在这篇博客中将接着介绍一下 SpringMVC 视图解析器.当我们对SpringMVC控制的 ...

  9. Centos操作系统配置VIP以及网络

    打开虚拟机的网络配置文件 vi /etc/sysconfig/network-script/ifc*** (具体文件根据情况自行填写) 编辑这个文件添加入如下配置 IPADDR=ip地址 (添加VIP ...

  10. Replication--将LSN转换成16进制

    在复制中经常会使用到16进制的LSN,但在日志fn_dblog中的LSN是数字形式,于是从网上找到以下转换函数CREATE FUNCTION dbo.fn_convertnumericlsntobin ...