网站建设合同 法律声明,网站开发培训设计,怎么做信息发布型网站,mp6 wordpress 静态正题
题目链接:https://www.luogu.com.cn/problem/P3586 题目大意 nnn个数#xff0c;有操作
修改一个数假如每次选出ccc个正数让它们减去111#xff0c;求能否进行操作sss次。 解题思路
如果有cntcntcnt个数大于sss那么有解当且仅当满足cnt≥ccnt\geq ccnt≥c或者小于sss…正题
题目链接:https://www.luogu.com.cn/problem/P3586 题目大意
nnn个数有操作
修改一个数假如每次选出ccc个正数让它们减去111求能否进行操作sss次。 解题思路
如果有cntcntcnt个数大于sss那么有解当且仅当满足cnt≥ccnt\geq ccnt≥c或者小于sss的数的和大于(c−cnt)∗s(c-cnt)*s(c−cnt)∗s。
证明第一个条件显然是充分的考虑第二个条件。我们这cntcntcnt个数会被选择在剩下的数中显然最优的话我们每次会选择最大的数来减去那么发现这样每个数都会被取完知道剩下的数不到c−cntc-cntc−cnt个。
用动态开点的权值线段树维护即可时间复杂度O(mlogai)O(m\log a_i)O(mlogai) codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N1e710,inf1e9;
ll n,m,cnt,rt,val[N],a[N],sum,w,ls[N],rs[N],num[N];
void Change(ll x,ll l,ll r,ll pos,ll z){if(!x)xcnt;val[x]z;num[x]z*pos;if(lr)return;ll mid(lr)1;if(posmid)Change(ls[x],l,mid,pos,z);else Change(rs[x],mid1,r,pos,z);return;
}
ll Ask(ll x,ll l,ll r,ll pos){if(lr){wnum[x];return val[x];}ll mid(lr)1;if(posmid){wnum[rs[x]];return Ask(ls[x],l,mid,pos)val[rs[x]];}return Ask(rs[x],mid1,r,pos);
}
int main()
{freopen(book.in,r,stdin);freopen(book.out,w,stdout);scanf(%lld%lld,n,m);while(m--){char s[5];ll l,r;scanf(%s%lld%lld,s,l,r);if(s[0]U){sum-a[l]-r;if(a[l])Change(rt,1,inf,a[l],-1);Change(rt,1,inf,a[l]r,1);}else{w0;ll cntAsk(rt,1,inf,r);if(cntl||sum-w(l-cnt)*r)printf(TAK\n);else printf(NIE\n); }}return 0;
}