【MX-S1】梦熊周赛 · 提高组 1(同步赛)
\(T1\) luogu P10672 【MX-S1-T1】壁垒 \(100pts\)
-
一个简单的结论:随着前缀长度的增长,出现的数字种类数每次只能增加 \(0\) 或 \(2\)。考虑构造时可以从这里下手。
-
一种构造方案是这样的:优先让数字种类数增加 \(2\),即先将原先没有出现过的数往前放;接着让数字种类数增加 \(0\),即后将原先出现过的数往后放。
- 同时,也解释了当 \(1 \sim n\) 中出现的数字种类数是奇数时不存在这样的重排方式。
-
找重复元素时可以借助
unique
函数,但需要注意的是unique
函数对于重复的元素并不是将其删除,而是将其移动赋值,可能会覆盖先前的数,可参考 C++ 手册,故可以使用一个桶来进行手动统计。点击查看代码
int a[100010],vis[100010]; int main() {int n,m,i,j;cin>>n;for(i=1;i<=n;i++){cin>>a[i];vis[a[i]]++;}sort(a+1,a+1+n);m=unique(a+1,a+1+n)-(a+1);if(m%2==0){for(i=1;i<=m;i++){vis[a[i]]--;cout<<a[i]<<" ";}for(i=1;i<=n;i++){for(j=1;j<=vis[i];j++){cout<<i<<" ";}}}else{cout<<"-1"<<endl;}return 0; }
\(T2\) luogu P10673 【MX-S1-T2】催化剂 \(100pts\)
-
从贪心的角度分析,当小 K 有 \(x(x \ge k)\) 个同种糖果时,将其分给 \(k\) 个小朋友时尽可能平均发是最优情况,此时产生的愤怒值为 \(x-k\)。
-
那么,设出现次数 \(\ge k\) 的糖果分别为 \(b_{1},b_{2},b_{3}, \dots ,b_{m}\),其出现次数分别为 \(c_{1},c_{2},c_{3}, \dots ,c_{m}\),最终有 \(\sum\limits_{i=1}^{m}c_{i}-mk\) 即为所求。其中,\(\sum\limits_{i=1}^{m}c_{i}\) 和 \(m\) 均可通过权值树状数组维护。
-
注意及时删除因修改造成的影响及树状数组中下标为 \(0\) 对操作中的影响。
点击查看代码
ll c[2][3000010],vis[3000010]; ll lowbit(ll x) {return x&(-x); } void add(ll n,ll x,ll key,ll c[]) {for(ll i=x;i<=n;i+=lowbit(i)){c[i]+=key;} } ll getsum(ll x,ll c[]) {ll ans=0;for(ll i=x;i>=1;i-=lowbit(i)){ans+=c[i];}return ans; } int main() {ll n,q,pd,x,i;scanf("%lld%lld",&n,&q);for(i=1;i<=n;i++){scanf("%lld",&x);if(vis[x]!=0){add(3000000,vis[x],-1,c[0]);add(3000000,vis[x],-vis[x],c[1]);}vis[x]++;if(vis[x]!=0){add(3000000,vis[x],1,c[0]);add(3000000,vis[x],vis[x],c[1]);}}for(i=1;i<=q;i++){scanf("%lld%lld",&pd,&x);if(pd==1){if(vis[x]!=0){add(3000000,vis[x],-1,c[0]);add(3000000,vis[x],-vis[x],c[1]);}vis[x]++;if(vis[x]!=0){add(3000000,vis[x],1,c[0]);add(3000000,vis[x],vis[x],c[1]);}}if(pd==2){if(vis[x]!=0){add(3000000,vis[x],-1,c[0]);add(3000000,vis[x],-vis[x],c[1]);}vis[x]--;if(vis[x]!=0){add(3000000,vis[x],1,c[0]);add(3000000,vis[x],vis[x],c[1]);}}if(pd==3){printf("%lld\n",getsum(3000000,c[1])-getsum(x-1,c[1])-(getsum(3000000,c[0])-getsum(x-1,c[0]))*x);}}return 0; }
\(T3\) luogu P10674 【MX-S1-T3】电动力学
- 不会,暂时咕了。
\(T4\) luogu P10675 【MX-S1-T4】先见之明
- 不会,暂时咕了。
总结
- \(T1\)
- 慎用 STL 。
- \(T2\)
- 注意动态插入需要的空间,同平衡树相关应用。
- 注意大量输入、输出对时间损耗的影响。