正题

题目链接:https://www.luogu.com.cn/problem/P3586


题目大意

nnn个数,有操作

  1. 修改一个数
  2. 假如每次选出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(mlog⁡ai)O(m\log a_i)O(mlogai​)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e7+10,inf=1e9;
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)x=++cnt;val[x]+=z;num[x]+=z*pos;if(l==r)return;ll mid=(l+r)>>1;if(pos<=mid)Change(ls[x],l,mid,pos,z);else Change(rs[x],mid+1,r,pos,z);return;
}
ll Ask(ll x,ll l,ll r,ll pos){if(l==r){w+=num[x];return val[x];}ll mid=(l+r)>>1;if(pos<=mid){w+=num[rs[x]];return Ask(ls[x],l,mid,pos)+val[rs[x]];}return Ask(rs[x],mid+1,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{w=0;ll cnt=Ask(rt,1,inf,r);if(cnt>=l||sum-w>=(l-cnt)*r)printf("TAK\n");else printf("NIE\n"); }}return 0;
}

P3586-[POI2015]LOG【线段树】相关推荐

  1. 线段树 ---- CF1004F Sonya and Bitwise OR(线段树上分治合并区间信息 + or 前缀和的log性质)

    题目链接 题目大意: 解题思路: 考虑只有一次询问时怎么做. 分治.每次考虑LLL位于左半边,RRR位于右半边的情况(也就是"跨过中点"的答案).再分别递归左.右两边.计算跨过中点 ...

  2. 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 830  Solved: 338 Description ...

  3. [POI2015] Pustynia(差分约数,线段树优化建图,拓扑)

    传送门 Description 给定一个长度为n的正整数序列aaa,每个数都在111到10910^9109范围内,告诉你其中sss个数,并给出mmm条信息,每条信息包含三个数l,r,kl,r,kl,r ...

  4. 洛谷P3588 [POI2015]PUS(线段树优化建图)

    题面 传送门 题解 先考虑暴力怎么做,我们把所有\(r-l+1-k\)中的点向\(x\)连有向边,表示\(x\)必须比它们大,那么如果这张图有环显然就无解了,否则的话我们跑一个多源最短路,每个点的\( ...

  5. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  6. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  7. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

  8. POJ - 2763 Housewife Wind LCA+dfs序+线段树

    q次询问求两个点之间的距离,并且可以随时修改某条边的长度,最短距离可以用lca来求,但是树上维护每一个点到root的距离必须要用dfs序来记录时间戳,在dfs的时候顺便记录每一条边(u,v)对应的v节 ...

  9. UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP

    题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ...

最新文章

  1. Kubernetes 中 设置pod不部署在同一台节点上
  2. 使用委派调用对象的方法
  3. Linux定时备份数据到百度云盘
  4. 第30讲:如何爬app的数据
  5. 【中国版Office 365 应用程序注册】
  6. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...
  7. diskgenius 数据迁移_活见鬼,明明删除了数据,空间却没减少! - *IT界农民工*
  8. MapReduce:Shuffle过程详解
  9. angular之$parse
  10. iOS-集成阿里百川IMSDK的服务端及客户端
  11. TCP三次握手和四次挥手详解 --- 转载
  12. codeforces 690D2 D2. The Wall (medium)(组合数学)
  13. 如何使用Orchard搭建敏捷个人的网站(2)
  14. gamma分布_深度学习需要掌握的 13 个概率分布(含代码)
  15. tekla钢结构算量_BIM钢结构造价怎么做?BIM如何用于钢结构工程量计算?
  16. linux罗技键盘驱动下载,罗技m590驱动-罗技m590无线鼠标驱动下载 v8.10.154官方版-下载啦...
  17. eeprom和编程器固件 k2_关于k2的一个非常诡异的情况,涉及原厂固件比第三方如老毛子网速快,穿墙,eeprom等...
  18. 纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com
  19. imageAI使用教程
  20. 将Imagenet2012比赛数据解析为图像

热门文章

  1. mysql 备份 master_如何配置MYSQL的MASTER---SLAVE复制备份?
  2. android dialog 自定义布局,如何设置AlertDialog的自定义布局?
  3. leetcode343. 整数拆分(思路+详解)
  4. leetcode37. 解数独
  5. 7-43 字符串关键字的散列映射 (25 分)(思路+详解+不懂的兄弟们来呀)兄弟们我干了5个小时,一个一个测试点过的
  6. [Redis6]常用数据结构_Hash哈希
  7. Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。
  8. C++ class实现二叉树(完整代码,附非递归遍历)
  9. Θ(n)反转单链表(算法导论第三版第十章10.2-7)
  10. mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)