YbtOJ-变量观测【鸽笼原理】
正题
题目大意
有nnn个数字开始都是000,要求有qqq次操作。
- 新建一个观测员,观测其中的kkk个数,当这kkk个数从此刻开始变化量不小于ttt时观测结束。
- 将第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−1t,所以这样的次数应该为logkk−1t\log_{\frac{k}{k-1}}tlogk−1kt。
用个setsetset维护就好了,时间复杂度:O(qlogkk−1tklogq)O(q\log_{\frac{k}{k-1}}tk\log q)O(qlogk−1ktklogq)
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-变量观测【鸽笼原理】相关推荐
- HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场
题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...
- 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 ...
- CF1379F1 Chess Strikes Back (easy version)(鸽笼原理、线段树)
解析 很神奇的一道题 关键在于把22的正方形看成一个单位的转化 由于每个22最多有一个国王 因此每个2*2都一定有一个国王 这是本题的关键 个人感觉这个思想很像鸽笼原理 至于后面的线段树就水到渠成了 ...
- Loj#3077-「2019 集训队互测 Day 4」绝目编诗【结论,虚树,鸽笼原理】
正题 题目链接:https://loj.ac/p/3077 题目大意 给出nnn个点mmm条边的一张简单无向图,求是否存在两个长度相等的简单环. 1≤n≤104,1≤m≤1061\leq n\leq ...
- 从鸽笼原理到拉姆塞数
1958年6-7月号美国的<数学月刊>上刊载着这样一个有趣的问题:"任何6个人的聚会,其中总会有3个人相互认识,或3个人相互不认识"(这是确定事件,不是以一定概率发生) ...
- 【jzoj 5101】凡喵识图 / Image Recognition(鸽笼原理)(模拟)
凡喵识图 / Image Recognition 题目链接:jzoj 5101 题目大意 给你一些 2^64 大小的数,然后每插入一个数之前,询问原本有多少个数的二进制跟它的二进制恰好有三位不同. 思 ...
- 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]
文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...
- LeetCode 164. 最大间距(桶排序+鸽笼原理)
2020年9月4日 周五 天气晴 [不悲叹过去,不荒废现在,不惧怕未来] 本文目录 桶排+鸽笼原理 想法 代码 参考文献 桶排+鸽笼原理 想法 桶的容量 bucketSize = (maxVal - ...
- 找到数组里消失的数字(鸽笼原理)
概念 鸽笼原理 (抽屉原理) "如果有五个鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2只或2只以上鸽子."这个简单的事实就是著名的鸽笼原理,在我们国家更 ...
最新文章
- CSS解决高度自适应问题
- python使用redis队列_【Python】python使用redis做队列服务
- WIN8配置IIS8.0+PHP+Mysql+Zend
- 10.4-全栈Java笔记:常用流详解(二)
- Java 汉字转拼音 Scala 汉字转拼音
- nsq Android客户端,NSQ的golang客户端简单使用
- Exchange 2013 、Lync 2013、SharePoint 2013 三
- 数据字典模板_巧用单元格保护功能+字典技术,制作高大上的人员信息录入表...
- eclipse 安装包下载
- 智慧机场室内导航系统-采用蓝牙定位方案-导乘整体解决方案
- meanshift算法通俗讲解
- 2021一波精品网易云歌单,应该有你喜欢的
- Linux或windows输入中文顿号变成反斜杠 | Linux或windows中英文标点符号切换
- 数字图像处理 笔记--2
- python---合并两个excel表格内容
- pta 7-1 走楼梯升级版(递归)
- linux之wait函数
- 程序设计基础c语言版大作业,程序设计基础(C语言版)
- 基于Preevision的面向服务架构SOA和以太网通信设计方法
- web表单设计器Ueditor Formdesign Plugins安装使用教程
热门文章
- 提升树算法总结(一)
- linux运行.pak文件,使用game-to-flatpak脚本将商业Linux游戏安装程序转换为Flatpak应用程序...
- android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
- element文件上传有文件但是后台接收为空_程序员提高篇:大规格文件(G)是如何做分片优化的?...
- php图片上传 thinkphp5,thinkphp5图片上传接口
- access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
- python删除符合条件的行_这十道经典Python笔试题,全做对算我输
- linux强大功能,linux grep和find 的强大功能
- vue 前端设置允许跨域_web 前端的一些小问题
- sql计算留存_SQL基础第七讲:关于用户留存率的计算