题目传送门

 #include <cstdio>
#include <cstring>
#define lson l, m, rt << 1
#define rson m+1, r, rt << 1 | 1 const int MAX_N = + ;
int sum[MAX_N << ];
struct node
{
char name[];
int val;
}boy[MAX_N<<];
int ans[MAX_N];
int id;
int n, k; void build(int l, int r, int rt)
{
sum[rt] = r - l + ;
if (l == r)
return ;
int m = (l + r) >> ;
build (lson);
build (rson);
} int update(int p, int l, int r, int rt)
{
sum[rt]--;
if (l == r)
{
return l;
}
int m = (l + r) >> ;
if (p <= sum[rt<<])
{
return update (p, lson);
}
else
{
return update (p - sum[rt<<], rson);
}
} void Solve(){ //计算ans
memset(ans,,sizeof(ans));
for(int i=;i<=n;i++){
ans[i]++;
for(int j=*i;j<=n;j+=i)
ans[j]++;
}
int max=ans[];
id=;
for(int i=;i<=n;i++) //找出第几个人跳出获得的糖最多
if(ans[i]>max){
max=ans[i];
id=i;
}
} int main(void) //POJ 2886 Who Gets the Most Candies?
{
//freopen ("inF.txt", "r", stdin); while (~scanf ("%d%d", &n, &k))
{
build (, n, );
for (int i=; i<=n; ++i)
{
scanf ("%s%d", &boy[i].name, &boy[i].val);
//printf ("%s%d\n", boy[i].name, boy[i].val);
}
Solve();
//int maxn = f(n);
int mod = sum[];
boy[].val = ;
int pos = ;
//printf ("%d\n", id);
int m=id;
while (m--)
{
if (boy[pos].val > )
k=((k-+boy[pos].val-)%mod+mod)%mod+;
else
k=((k-+boy[pos].val)%mod+mod)%mod+;
pos = update (k, , n, );
//printf ("%d ", pos);
mod = sum[];
}
printf ("%s %d\n", boy[pos].name, ans[id]);
}
}

线段树(单点更新) POJ 2886 Who Gets the Most Candies?的更多相关文章

  1. 线段树单点更新poj 2828

    n个人 他要插入的位置 和权值(这东西就最后输出来的) 倒的插就一定是他自己的位子 一个线段树维护一下就可以了 nlog(n) #include<stdio.h> #include< ...

  2. 线段树(单点更新) POJ 2828 Buy tickets

    题目传送门 /* 结点存储下面有几个空位 每次从根结点往下找找到该插入的位置, 同时更新每个节点的值 */ #include <cstdio> #define lson l, m, rt ...

  3. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  4. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

  5. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  6. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  7. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  8. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  9. HDU 1166 敌兵布阵(线段树单点更新,板子题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. android keyEvent

    http://developer.android.com/reference/android/view/KeyEvent.html

  2. adb问题整理

    1.开启了两个adb,关掉一个,重启eclipse既可 java.io.IOException: 您的主机中的软件中止了一个已建立的连接. at sun.nio.ch.SocketDispatcher ...

  3. (23) java web的struts2框架的使用-struts动态调用和通配符

    一,动态查找 1,配置允许动态调用 <!-- 允许动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocat ...

  4. IRRIGATION LINES

    IRRIGATION LINES Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:65536KB Total submit us ...

  5. POJ3080 Blue Jeans —— 暴力枚举 + KMP / strstr()

    题目链接:https://vjudge.net/problem/POJ-3080 Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total ...

  6. RegistryView

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registryview?view=netframework-4.7 On th ...

  7. hash与map的区别联系应用(转)

    一,hashtable原理: 哈希表又名散列表,其主要目的是用于解决数据的快速定位问题.考虑如下一个场景. 一列键值对数据,存储在一个table中,如何通过数据的关键字快速查找相应值呢?不要告诉我一个 ...

  8. IDEA下搭建简单的SpringBoot工程应用

    (1)File->new,选择maven,创建一个空项目,直接next. (2)填写工程名,next. (3)填写项目名,next,创建一个基于maven的空Java项目. (4)在pom文件中 ...

  9. OpenCV2.4.13+VS2012开发环境配置

    1.下载和安装OpenCV SDK 在OpenCV官网的下载页面: http://opencv.org/downloads.html   找到对应OpenCV for Windows版本下载.目前(2 ...

  10. linux--多种包管理工具使用和区别(转)

    Linux包管理工具(转) 在正式进入讨论之前,先贴几条非常有用的link: linux 发行版比较:http://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1 ...