Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum(树状数组)
题目链接:Problem - D - Codeforces
题意:给定一个 01 序列 ,对 区间分别进行递增排序,得到 个序列,现给定 序列, ,即所有序列第 位的和。求给定 序列所对应的原序列 。保证原序列 一定存在。
题解: 观察发现对于不同的排序中 1 的数量不会改变,所以 就是原序列中 1 的数量。
对于最后一个 ,即 ,发现若 等于 ,则 一定等于 ,原因如下:该数为序列末尾数,排列方式为递增排列,所以末尾位置上的 不论如何都不会离开,所以总贡献为 。现考虑如果将第 个数字移除所得到的 序列与原 序列的变化。移走一个数,序列数量 -1,并且移走的序列一定是递增序列,因为它是对 区间进行递增排序。当前序列中共有 个 1,那么就需要对 序列在 区间内每个数字-1。这个操作用树状数组优化。区间修改,维护差分数组。
#include <bits/stdc++.h>using namespace std;#define int long long
const int N = 2e5+10;
int t[N], n;void modify(int x, int c) {while(x <= n) {t[x] += c; x += (x&-x); }
}int query(int x) {int res = 0;while(x) {res += t[x]; x -= (x&-x);}return res;
}void slv() {int num_one = 0, cnt = 0; cin >> n;for(int i=1; i<=n; i++) t[i] = 0;vector<int> c(n + 1);for(int i=1; i<=n; i++) {cin >> c[i];num_one += c[i]; modify(i, c[i] - c[i - 1]);}num_one /= n;for(int i=n; i>=1; i--) {if(query(i) >= i) {c[i] = 1; modify(i - num_one + 1, -1);modify(i + 1, 1);num_one --;} else c[i] = 0;} for(int i=1; i<=n; i++) cout << c[i] << ' ';cout << '\n';
}signed main() {cin.tie(nullptr)->sync_with_stdio(false);int _; cin >> _;while(_--)slv();
}
Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum(树状数组)相关推荐
- Codeforces Round #782 (Div. 2) A~D
Codeforces Round #782 (Div. 2) A. Red Versus Blue 题意:红队和蓝队进行了 n n n次比赛.用一个长度为 n n n的字符串表示每场的胜负情况.R代表 ...
- Codeforces Round #782 (Div. 2)
咕咕咕咕咕 前段时间去打华为软挑了,所以停了一段时间的训练,嘤嘤嘤 这场本来要打,然后十分钟写A写bug了,于是玩游戏去了-- 早上vp了一下,下课了就溜回去睡觉了,下午把c做了,d还没看,回头看一下 ...
- Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum
Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum 题目链接 You are given an array a consisting of ...
- Codeforces Round #782 (Div. 2) ABCD
打昆明打傻了,不会写题了QWQ A - Red Versus Blue 要求连续的 R R R的数量最少,也就是用 B B B尽可能的将 R R R隔开,显然 b b b个 B B B最多分成 b + ...
- Codeforces Round #782 (Div. 2) A-D题解
A. Red Versus Blue 每一次循环都计算R和B的比例,然后输出t个R,一个B,每次输出都判断是否结束 #include <iostream> #include <alg ...
- Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学
传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...
- Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...
- Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...
- Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力
传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...
最新文章
- HttpWebRequest下载文件,乱码问题解决方案
- 实现checkbox的全选和取消
- Httprunner生成Allure格式HTML报告
- 【渝粤题库】陕西师范大学191203 法理学导论 作业
- 《重构-改善既有代码的设计》-第1例:租赁影片(1)
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
- CDN 的诞生、术语、原理、特征以及应用场景
- Un*、Id分别突变情况下单闭环直流调速系统仿真
- 00006__WindowsAPI 之 CreatePipe、CreateProcess
- 计算机控制技术毕业论文题目,计算机控制方面论文选题 计算机控制论文题目怎样定...
- lpx寒假作业案例1
- 提取酷我音乐MP3外链地址 可放到QQ空间做背景音乐
- android真机测试什么不同,android真机测试闪退
- linux ksoftirqd进程,ksoftirqd进程导致cpu消耗殆尽
- 前端案例-30 Vue常用特性案例汇总
- MFC中添加GIF图片
- win10右键新建没有文本文档
- iCloud云备份与照片库
- 求最小公倍数【牛客网】
- matlab多条曲线绘制在一张表格——设置绘图曲线类型、plot设置名称、坐标轴范围和精度
热门文章
- 综合练习4 厘米与英寸互转
- Shell 和 Shell 脚本 (Shell Script)
- 上班累还是上学累?不快乐才是最累的
- python学习报告总结_最新python学习总结
- word的使用——邮件合并
- IDEA 官网本地无法访问
- 小程序-首页小列表查看更多
- uniCloud中云函数、云对象、Schema表、openDB、JQL概述
- 记录一次自己的电脑磁盘占用率100%的遭遇
- win10玩cf不能全屏_5千左右预算,2020年畅玩吃鸡、魔兽、LOL、CF、炉石传说、逆水寒,高性价台式电脑推荐/选购指南...