题目链接: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(树状数组)相关推荐

  1. Codeforces Round #782 (Div. 2) A~D

    Codeforces Round #782 (Div. 2) A. Red Versus Blue 题意:红队和蓝队进行了 n n n次比赛.用一个长度为 n n n的字符串表示每场的胜负情况.R代表 ...

  2. Codeforces Round #782 (Div. 2)

    咕咕咕咕咕 前段时间去打华为软挑了,所以停了一段时间的训练,嘤嘤嘤 这场本来要打,然后十分钟写A写bug了,于是玩游戏去了-- 早上vp了一下,下课了就溜回去睡觉了,下午把c做了,d还没看,回头看一下 ...

  3. 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 ...

  4. 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 + ...

  5. Codeforces Round #782 (Div. 2) A-D题解

    A. Red Versus Blue 每一次循环都计算R和B的比例,然后输出t个R,一个B,每次输出都判断是否结束 #include <iostream> #include <alg ...

  6. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  7. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

  8. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

    传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...

  9. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...

最新文章

  1. HttpWebRequest下载文件,乱码问题解决方案
  2. 实现checkbox的全选和取消
  3. Httprunner生成Allure格式HTML报告
  4. 【渝粤题库】陕西师范大学191203 法理学导论 作业
  5. 《重构-改善既有代码的设计》-第1例:租赁影片(1)
  6. Java Web文件上传原理分析(不借助开源fileupload上传jar包)
  7. CDN 的诞生、术语、原理、特征以及应用场景
  8. Un*、Id分别突变情况下单闭环直流调速系统仿真
  9. 00006__WindowsAPI 之 CreatePipe、CreateProcess
  10. 计算机控制技术毕业论文题目,计算机控制方面论文选题 计算机控制论文题目怎样定...
  11. lpx寒假作业案例1
  12. 提取酷我音乐MP3外链地址 可放到QQ空间做背景音乐
  13. android真机测试什么不同,android真机测试闪退
  14. linux ksoftirqd进程,ksoftirqd进程导致cpu消耗殆尽
  15. 前端案例-30 Vue常用特性案例汇总
  16. MFC中添加GIF图片
  17. win10右键新建没有文本文档
  18. iCloud云备份与照片库
  19. 求最小公倍数【牛客网】
  20. matlab多条曲线绘制在一张表格——设置绘图曲线类型、plot设置名称、坐标轴范围和精度

热门文章

  1. 综合练习4 厘米与英寸互转
  2. Shell 和 Shell 脚本 (Shell Script)
  3. 上班累还是上学累?不快乐才是最累的
  4. python学习报告总结_最新python学习总结
  5. word的使用——邮件合并
  6. IDEA 官网本地无法访问
  7. 小程序-首页小列表查看更多
  8. uniCloud中云函数、云对象、Schema表、openDB、JQL概述
  9. 记录一次自己的电脑磁盘占用率100%的遭遇
  10. win10玩cf不能全屏_5千左右预算,2020年畅玩吃鸡、魔兽、LOL、CF、炉石传说、逆水寒,高性价台式电脑推荐/选购指南...