线段树csdn-金沙1005

线段树csdn_scratch画螺旋六边形「建议收藏」tillicollapse对于每个k,考虑贪心地取,最多分成n/k段,每段都贪心取的话,总次数为nlogn用线段树维护这个过程,在线段树上二分就可以了。

till i collapse

对于每个 k, 考虑贪心地取, 最多分成 n / k段, 每段都贪心取的话, 总次数为nlogn

用线段树维护这个过程, 在线段树上二分就可以了。

#include #define ll long long #define ld long double #define ull unsigned long long #define fi first #define se second #define mk make_pair #define pll pair #define pli pair #define pii pair #define sz(x) ((int)x.size()) #define all(x) (x).begin(), (x).end() #define fio ios::sync_with_stdio(false); cin.tie(0); using namespace std; const int n = 1e5   7; const int inf = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const int mod = 998244353; const double eps = 1e-8; const double pi = acos(-1); template<class t, class s> inline void add(t& a, s b) {a  = b; if(a >= mod) a -= mod;} template<class t, class s> inline void sub(t& a, s b) {a -= b; if(a < 0) a  = mod;} template<class t, class s> inline bool chkmax(t& a, s b) {return a < b ? a = b, true : false;} template<class t, class s> inline bool chkmin(t& a, s b) {return a > b ? a = b, true : false;} int n, a[n]; int nex[n]; int map[n]; int ans[n]; bool vis[n]; namespace sgt { #define lson l, mid, rt << 1 #define rson mid   1, r, rt << 1 | 1 int a[n << 2]; void update(int p, int val, int l, int r, int rt) { if(l == r) { a[rt]  = val; return; } int mid = l   r >> 1; if(p <= mid) update(p, val, lson); else update(p, val, rson); a[rt] = a[rt << 1]   a[rt << 1 | 1]; } int query(int res, int l, int r, int rt) { if(l == r) return l; int mid = l   r >> 1; if(a[rt << 1] > res) return query(res, lson); else return query(res - a[rt << 1], rson); } } int main() { scanf("%d", &n); for(int i = 1; i <= n; i  ) scanf("%d", &a[i]); for(int i = n; i >= 1; i--) { nex[i] = map[a[i]]; vis[nex[i]] = true; map[a[i]] = i; } priority_queue, greater > que; for(int i = 1; i <= n; i  ) que.push(mk(1, i)); for(int i = 1; i <= n; i  ) if(!vis[i]) sgt::update(i, 1, 1, n   1, 1); for(int i = 1; i <= n; i  ) { while(!que.empty() && que.top().fi == i) { int qid = que.top().se; que.pop(); ans[qid]  ; int nexpos = sgt::query(qid, 1, n   1, 1); que.push(mk(nexpos, qid)); } sgt::update(i, -1, 1, n   1, 1); if(nex[i]) sgt::update(nex[i], 1, 1, n   1, 1); } for(int i = 1; i <= n; i  ) printf("%d%c", ans[i], " \n"[i == n]); return 0; } /* */

希望我今天分享的这篇文章可以帮到您。

 

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/370100.html

(0)


相关推荐

  • 如何卸载visual studio2015_怎么把visual studio卸载干净目录 一.查找 vs_community.exe 文件 二.以管理身份打开 cmd 窗口 三.使用微软官方的卸载工具来清理残余数据 1.下载清理工具 2.以管理员身份执行 setup.forcedun

  • redis pipeline使用方法_redis跳表原理redispipeline

  • dll 调试_dll库调试dll本身是没法运行的,必须在其它工程调用dll时候才会运行。所以,调试dll首先要将调用dll的工程和dll工程联系起来。金沙1005的解决方案中添加dll工程:现在dll和应用程序两个工程就都在一个金沙1005的解决方案里了:这时要对dll工程作些设置。配置属性-常规-输出目录设置为应用程序的生成目录(调用dll的应用程序的目录?)这样一来编译的dll、pbd文件就直接输出到…_dll调试

  • virtualbox 教程_虚拟机的使用步骤virtualbox使用教程图解。虚拟机软件在这里我向大家推荐virtualbox。为什么推荐他呢?原因有三:1.体积小巧,相对于vmware动辄几百m的安装包来说virtualbox几十m的体积真算小巧了;2.免费,这点好处不用说,至少不需要到网上到处找激活成功教程版甚至于下载到有毒的版本。3.功能够用,

  • java获取月份日历信息(包含农历节气)[亲测有效]1.新建一个util工具类 import java.util.*;public class mycalendar { private int year = 0; private int month =

  • 细谈activity四种启动模式    嗨大家好,又和大家见面了,上一次我们一起搞清楚了handler的源码机制(现在回想起来是不是感觉也就那么回事,当时看的头皮发麻-。 !!),今天我们谈一谈我们在android开发中必不可缺少的一个组件——activity:    activity作为四大组件之一,也可以说是四大组件中最重要的一个组件,它负责app的视图,还负责用户交互,而且有时候还经常其他组件绑定使用,可以说非常的重要。 …

  • 集中式架构vs分布式架构「终于解决」历史自从20世纪60年代大型主机被发明出来以后,凭借其超强的计算和i/o处理能力以及在稳定性和安全性方面的卓越表现,在很长一段时间内,大型主机引领了计算机行业以及商业计算领域的发展。由于大型主机卓越的性能和良好的稳定性,其在单机处理能力方面的优势非常明显,使得it系统快速进入了集中式处理阶段,其对应的计算机系统称为集中式系统。但从20世纪80年代以来,随着微型计算机的出现,越来越多廉价的pc机…

  • saber入门学习saber入门学习_saber教程

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图