6846. 【2020.11.02提高组模拟】旅人1970
Description
Input
Output
Sample Input
Sample Input1 25 4 4 1 2 3 2 1 1 1 2
Sample Output
Sample Output1 2 10 6
Data Constraint
Solution
这题需要找到三个结论。
1.在最优划分中,某个众数只会在不同集合中出现最多一次(同一个众数只能出现在相同集合中),否则可以将相同众数的两个集合合并来减小答案。
2.若首先选出了若干的数作为每个集合的众数,那么这个划分方案合法当且仅当这些众数的个数之和大于等于其余没选的数中个数的最大值,因为如果最多个数的数都能被分成若干个集合,那么其他的数也一定存在一种方案将它们放进众数集合中。
3.所有删去的数字形成的连续段数不超过
证明:
对于某个删去的数字,若它右边的数字没有被删掉,那么右边的这个数字一定大于前面删去的数字之和,否则它就会被删去。而未被删去的数字之和大于等于V且小于等于2V(由值域决定),而删去的数字在其中共出现了平方次,因此删去的数字形成的连续段只有根号级别。
这样,为了优化在序列上暴力找删除的连续段,我们改为在线段树上找删除的连续段:在线段树上的没一个节点维护区间的a[i]的和,所有a[i]的价值和(2^i),a[i]的最大值和最小值。若删去当前节点中的最小值都不能满足条件,直接退出;然后先遍历右节点,能删就删(这时用a[i]的和以及价值删),再遍历左节点。
总复杂度,实际上很难卡满。
总结:审清题->找结论->推式子/转化条件->得出算法
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define I int
#define ll long long
#define ls x<<1
#define rs ls|1
#define F(i,a,b) for(I i=a;i<=b;i++)
#define Fd(i,a,b) for(I i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof a)
#define N 200004
#define mo 998244353
using namespace std;
ll n,a[N],s[N],g[N],mx,q,p,x,y,tot,ans;
struct seg{I mx,mn;ll s,v;}f[N*4];
void R(ll &x){x=0;I w=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') w=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=w;
}
void up(I x){f[x]=seg{max(f[ls].mx,f[rs].mx),min(f[ls].mn,f[rs].mn),f[ls].s+f[rs].s,(f[ls].v+f[rs].v)%mo};
}
void cge(I k,I v,I x=1,I l=1,I r=n){if(l==r){f[x]=seg{v,v,v,g[l]};return;}I M=l+r>>1;if(k<=M) cge(k,v,ls,l,M);else cge(k,v,rs,M+1,r);up(x);
}
void del(I x=1,I l=1,I r=n){if(tot-f[x].mn<f[1].mx) return;if(tot-f[x].s>=f[1].mx){tot-=f[x].s;ans=(ans-f[x].v+mo)%mo;return;}I M=l+r>>1;del(rs,M+1,r),del(ls,l,M);
}
I main(){freopen("imperishable.in","r",stdin);freopen("imperishable.out","w",stdout);R(n),R(n);g[0]=1;F(i,1,n){R(a[i]);g[i]=g[i-1]*2%mo;cge(i,a[i]);}tot=f[1].s,ans=g[n+1]=(g[n]*2-2+mo)%mo;del();printf("%lld\n",ans);R(q);F(i,1,q){R(x),R(y);cge(x,y);tot=f[1].s,ans=g[n+1];del();printf("%lld\n",ans);}return 0;
}
6846. 【2020.11.02提高组模拟】旅人1970相关推荐
- 6848. 【2020.11.03提高组模拟】融入社会的计划
Description Input Output 一行一个整数表示答案. upd: 无解输出-1. Sample Input Sample Input1 6 6 13 11 1 1 4 5 5 Sa ...
- 【2020.11.30提高组模拟】剪辣椒(chilli)
剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...
- gmoj 6860. 【2020.11.14提高组模拟】鬼渊传说
题目 Time Limits: 1000 ms Memory Limits: 518400 KB 简要题意 给出一个网格图,每个格子有黑白二色,求有多少个子矩形满足将其挖出来后恰好有一个黑色四连通块且 ...
- JZOJ6893. 【2020.11.25提高组模拟】小 T 与灵石(stone)题解
这道题需要转化,换根和卡常. 首先将集合中的点拉出来,找它们的直径 不需要什么虚树,随便挑一个集合里的点为根,做一遍dfs,找最远点x(要在集合里),以x为根重复以上操作,找到最远点y,x-y就是题解 ...
- JZOJ6828. 【2020.10.25提高组模拟】幂
Description TTT组数据,T≤1e5,n≤1e7T\le1e5,n\le1e7T≤1e5,n≤1e7 Solution 好家伙,最下面的数据范围居然是这样的: 直接以为卡特兰数乘上个组合数 ...
- 6810. 【2020.10.05提高组模拟】路哥
Description Input Output Sample Input Sample Input1 3 1 1 1 1 1 2 2 3 Sample Input2 9 4 0 0 1 4 1 2 ...
- 【2020.12.03提高组模拟】袋鼠
题目 题目描述 你知道吗?乌拉圭的人口有345.7万,同时,仅澳大利亚就有4700万只袋鼠. 袋鼠决定入侵乌拉圭.袋鼠们将在平原上布阵,平原被划分成 n×mn \times mn×m 的网格. 每个格 ...
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
最新文章
- tcp socket 异常关闭总结
- html 自定义js,js 自定义事件
- 网站运营手册_新媒体代运营模式价格
- Java黑皮书课后题第3章:**3.24(游戏:抽牌)编写程序,模拟从一副52张的牌中抽一张牌,程序应显示牌的大小、花色
- BugkuCTF-Crypto题easy_crypto
- LeetCode 680 验证回文字符串 Ⅱ
- 服务器与普通电脑的区别?
- 入门highchart 第一天—— 环形图
- aspose转pdf乱码问题
- 人工智能的历史与发展
- 2018-2-13-win10-uwp-切换主题
- 虚拟化技术介绍 hypervisor简介
- “物联网开发实战”学习笔记-(三)通过感知光线开关电灯
- LeetCode(力扣)_接雨水
- java蓝桥杯数字黑洞_【蓝桥杯】数字黑洞(5位黑洞数)
- 基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法
- 开源规则引擎比较_开源物联网平台ThingsBoard
- 项立刚:FDD牌照发放 难改行业大格局
- python统计单词出现次数
- 本次秋招最差面试体验给到华为
热门文章
- 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍
- JAVA后端如何保证业务操作的幂等性
- OpenCV中的图像基本操作--B站视频教程笔记(四)
- 小学三年级计算机导学案,小学三年级下册科学导学案
- 苹果浏览器分辨率css,苹果(Safari)浏览器的图片width设置为100%但实际显示为980px改成的问题方法...
- 积极适应大数据时代要求 提升科技化和智能化水平
- 苹果状态栏HTML,有关HTML5页面在iPhoneX适配问题
- C 宏定义实现字符大小写转换
- 搭建企业级微信公众号管理平台(三)----注册码实现与校验,Redis存储
- 自制图像标注软件 —— 支持mask-rcnn等算法