YbtOJ-变量观测【鸽笼原理】

1|0正题


1|1题目大意

n个数字开始都是0,要求有q次操作。

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

强制在线

1n,q2×105,1k3,1t,v106


1|2解题思路

考虑从k入手,根据鸽笼原理,一个观测员观测结束当且仅当存在它观测的一个数字atk,注意到此时已经至少填充了tk

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

一直这样做知道合法为止,此时每次会至少令t=k1kt,所以这样的次数应该为logkk1t

用个set维护就好了,时间复杂度:O(qlogkk1tklogq)


1|3code

#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; }

__EOF__

本文作者QuantAsk
本文链接https://www.cnblogs.com/QuantAsk/p/15864679.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   QuantAsk  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示