正题


题目大意

有nnn个数字开始都是000,要求有qqq次操作。

  1. 新建一个观测员,观测其中的kkk个数,当这kkk个数从此刻开始变化量不小于ttt时观测结束。
  2. 将第iii个数加vvv,并输出此时观测结束的观测员编号。

强制在线

1≤n,q≤2×105,1≤k≤3,1≤t,v≤1061\leq n,q\leq 2\times 10^5,1\leq k\leq 3,1\leq t,v\leq 10^61≤n,q≤2×105,1≤k≤3,1≤t,v≤106


解题思路

考虑从kkk入手,根据鸽笼原理,一个观测员观测结束当且仅当存在它观测的一个数字a≥⌈tk⌉a\geq \lceil\frac{t}{k}\rceila≥⌈kt​⌉,注意到此时已经至少填充了⌈tk⌉\lceil\frac{t}{k}\rceil⌈kt​⌉。

所以我们可以对于每个它观测的数字以⌈tk⌉\lceil\frac{t}{k}\rceil⌈kt​⌉为界,当到倒打这个界时,我们直接重新根据现在的数字再来一次,也就是把ttt剩余的部分再分成kkk份丢回去。

一直这样做知道合法为止,此时每次会至少令t=k−1ktt=\frac{k-1}{k}tt=kk−1​t,所以这样的次数应该为log⁡kk−1t\log_{\frac{k}{k-1}}tlogk−1k​​t。

用个setsetset维护就好了,时间复杂度:O(qlog⁡kk−1tklog⁡q)O(q\log_{\frac{k}{k-1}}tk\log q)O(qlogk−1k​​tklogq)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<cmath>
#define ll long long
#define mp(x,y) make_pair(x,y)
using namespace std;
const ll N=2e5+10;
ll n,m,cnt,a[N],t[N];
vector<ll> ans,q[N],c[N];
set<pair<ll,ll> >s[N];
void update(ll x){ll sum=0;for(ll i=0;i<q[x].size();i++){ll y=q[x][i];sum+=a[y];s[y].erase(mp(c[x][i],x));}if(sum>=t[x])ans.push_back(x);else{for(ll i=0;i<q[x].size();i++){ll y=q[x][i];c[x][i]=a[y]+ceil((double)(t[x]-sum)/q[x].size());s[y].insert(mp(c[x][i],x));}}return;
}
signed main()
{//  freopen("obs.in","r",stdin);
//  freopen("obs.out","w",stdout);scanf("%lld%lld",&n,&m);ll las=0;while(m--){ll op;scanf("%lld",&op);if(op==1){ll k,sum=0;++cnt;scanf("%lld%lld",&t[cnt],&k);t[cnt]^=las;for(ll i=0,x;i<k;i++){scanf("%lld",&x);x^=las;q[cnt].push_back(x);sum+=a[x];c[cnt].push_back(a[x]+ceil((double)t[cnt]/k));s[x].insert(mp(c[cnt][i],cnt));}t[cnt]+=sum;}else{ans.clear();ll p,w;scanf("%lld%lld",&p,&w);p^=las;w^=las;a[p]+=w;while(!s[p].empty()){pair<ll,ll> k=*s[p].begin();if(a[p]>=k.first)update(k.second);else break;}printf("%lld",las=ans.size());sort(ans.begin(),ans.end());for(ll i=0;i<ans.size();i++)printf(" %lld",ans[i]);putchar('\n');}}return 0;
}

YbtOJ-变量观测【鸽笼原理】相关推荐

  1. HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场

    题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...

  2. Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)

    To become the king of Codeforces, Kuroni has to solve the following problem. He is given n numbers a ...

  3. CF1379F1 Chess Strikes Back (easy version)(鸽笼原理、线段树)

    解析 很神奇的一道题 关键在于把22的正方形看成一个单位的转化 由于每个22最多有一个国王 因此每个2*2都一定有一个国王 这是本题的关键 个人感觉这个思想很像鸽笼原理 至于后面的线段树就水到渠成了 ...

  4. Loj#3077-「2019 集训队互测 Day 4」绝目编诗【结论,虚树,鸽笼原理】

    正题 题目链接:https://loj.ac/p/3077 题目大意 给出nnn个点mmm条边的一张简单无向图,求是否存在两个长度相等的简单环. 1≤n≤104,1≤m≤1061\leq n\leq ...

  5. 从鸽笼原理到拉姆塞数

    1958年6-7月号美国的<数学月刊>上刊载着这样一个有趣的问题:"任何6个人的聚会,其中总会有3个人相互认识,或3个人相互不认识"(这是确定事件,不是以一定概率发生) ...

  6. 【jzoj 5101】凡喵识图 / Image Recognition(鸽笼原理)(模拟)

    凡喵识图 / Image Recognition 题目链接:jzoj 5101 题目大意 给你一些 2^64 大小的数,然后每插入一个数之前,询问原本有多少个数的二进制跟它的二进制恰好有三位不同. 思 ...

  7. 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]

    文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...

  8. LeetCode 164. 最大间距(桶排序+鸽笼原理)

    2020年9月4日 周五 天气晴 [不悲叹过去,不荒废现在,不惧怕未来] 本文目录 桶排+鸽笼原理 想法 代码 参考文献 桶排+鸽笼原理 想法 桶的容量 bucketSize = (maxVal - ...

  9. 找到数组里消失的数字(鸽笼原理)

    概念 鸽笼原理 (抽屉原理) "如果有五个鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2只或2只以上鸽子."这个简单的事实就是著名的鸽笼原理,在我们国家更 ...

最新文章

  1. CSS解决高度自适应问题
  2. python使用redis队列_【Python】python使用redis做队列服务
  3. WIN8配置IIS8.0+PHP+Mysql+Zend
  4. 10.4-全栈Java笔记:常用流详解(二)
  5. Java 汉字转拼音 Scala 汉字转拼音
  6. nsq Android客户端,NSQ的golang客户端简单使用
  7. Exchange 2013 、Lync 2013、SharePoint 2013 三
  8. 数据字典模板_巧用单元格保护功能+字典技术,制作高大上的人员信息录入表...
  9. eclipse 安装包下载
  10. 智慧机场室内导航系统-采用蓝牙定位方案-导乘整体解决方案
  11. meanshift算法通俗讲解
  12. 2021一波精品网易云歌单,应该有你喜欢的
  13. Linux或windows输入中文顿号变成反斜杠 | Linux或windows中英文标点符号切换
  14. 数字图像处理 笔记--2
  15. python---合并两个excel表格内容
  16. pta 7-1 走楼梯升级版(递归)
  17. linux之wait函数
  18. 程序设计基础c语言版大作业,程序设计基础(C语言版)
  19. 基于Preevision的面向服务架构SOA和以太网通信设计方法
  20. web表单设计器Ueditor Formdesign Plugins安装使用教程

热门文章

  1. 提升树算法总结(一)
  2. linux运行.pak文件,使用game-to-flatpak脚本将商业Linux游戏安装程序转换为Flatpak应用程序...
  3. android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
  4. element文件上传有文件但是后台接收为空_程序员提高篇:大规格文件(G)是如何做分片优化的?...
  5. php图片上传 thinkphp5,thinkphp5图片上传接口
  6. access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
  7. python删除符合条件的行_这十道经典Python笔试题,全做对算我输
  8. linux强大功能,linux grep和find 的强大功能
  9. vue 前端设置允许跨域_web 前端的一些小问题
  10. sql计算留存_SQL基础第七讲:关于用户留存率的计算