传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

针灸思维不行,数据结构来凑呗。
一开始做的时候想简单了,一直wawawa,后来想到了hackhackhack样例,开始换思路构造,结果死活想不到O(m)O(m)O(m)怎么构造,所以用堆维护写了个mlogmmlogmmlogm的。
首先[1,m][1,m][1,m]肯定是放在[1,m][1,m][1,m]对应的位置是最优的,所以当∑li<n\sum l_i<n∑li​<n或者i+li−1>ni+l_i-1>ni+li​−1>n就无解。
那么满足如上条件后,我们将每个数都放在了[1,m][1,m][1,m]的位置上,现在保证了每个颜色都出现了至少一次了,但是我们没有保证所有的都被涂色,因为右边有可能空出来一块,所以我们考虑将一部分右移。这里我右移的部分是整个一块右移,即将[l,m][l,m][l,m]右移,所以我们维护一个堆,里面一开始放着i+li−1i+l_i-1i+li​−1,从111开始,维护一个sumsumsum表示左边长度,deldeldel表示要减去多少,每次都让sum=sum+a[i]sum=sum+a[i]sum=sum+a[i],之后看一下sum+q.top()−del>=nsum+q.top()-del>=nsum+q.top()−del>=n,不满足继续i+1i+1i+1,否则就从当前长度一直减到sum+q.top()−del==nsum+q.top()-del==nsum+q.top()−del==n的时候停下,从这里填就好啦。

// Problem: C. Dreamoon Likes Coloring
// Contest: Codeforces - Codeforces Round #631 (Div. 2) - Thanks, Denis aramis Shitov!
// URL: https://codeforces.com/contest/1330/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<assert.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m;
int a[N],pos[N];
int suf[N];bool check() {LL sum=0;for(int i=1;i<=m;i++) {sum+=a[i];if(i+a[i]-1>n) return false;}if(sum<n) return false; priority_queue<PII>q;for(int i=2;i<=m;i++) q.push({i+a[i]-1,-i});sum=0; int del=1;for(int i=1;i<=m;i++) {pos[i]=sum+1;sum+=a[i];if(!q.size()) break;while(-q.top().Y<i) q.pop();if(sum+q.top().X-del>=n) {while(sum+q.top().X-del>n) sum--;sum++;for(int j=i+1;j<=m;j++) pos[j]=sum++;break;} del++;}for(int i=1;i<=m;i++) printf("%d ",pos[i]);return true;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d",&a[i]);if(!check()) {puts("-1");return 0;}return 0;
}
/**/

Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造相关推荐

  1. Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 思维 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你d,modd,modd,mod,让你求能构造出如下序列aaa的个数模modmodmod: 思路: 首先可以发现aaa的长度不能超过log2dlog_2dl ...

  2. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]

    A. Dreamoon and Ranking Collection 题意:题意不太好理解.简单来讲就是,给出一组数,能从1最多数到几,不够的用数来填,最多填x次.思路:代码很简单-先出现过的地方肯定 ...

  3. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  4. Codeforces Round #381 (Div. 1) A. Alyona and mex 构造

    传送门 文章目录 题意: 思路: 题意: 你需要确定一个长度为nnn的数组aaa,满足给定的mmm个[l,r][l,r][l,r]限制,需要保证构造出来的aaa数组对于每个[l,r][l,r][l,r ...

  5. Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

    传送门 文章目录 题意: 思路: 题意: 思路: 史上最水GGG题,没有之一. 考虑最小的情况如何构造,显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可,这样的最小值为n∗(n+1)2\f ...

  6. Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

    传送门 文章目录 题意: 思路 题意: 直接白嫖 思路 首先不难发现,n≤2n\le2n≤2的时候是无解的. 现在我们来构造n=3n=3n=3的情况,通过打表可以发现如下矩阵是符合题目要求的: 179 ...

  7. Codeforces Round #631 (Div. 2) - Thanks, Denis aramis Shitov! E. Drazil Likes Heap(贪心+模拟)

    题目链接 思路:这个题就是阅读理解题,能理解题意的话应该是秒出的那种,着重解释一下题意. 题意是给定一棵完全二叉树(共2^h-1个结点),这个二叉树满足大顶堆的性质也就是父亲结点a[i]大于等于儿子结 ...

  8. Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造

    B. Invariance of Tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/ ...

  9. Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)

    题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...

最新文章

  1. python使用imbalanced-learn的AllKNN方法进行下采样处理数据不平衡问题
  2. python爬虫换电脑不能运行_python爬虫程序运行失败,求原因
  3. 汇哲科技-9月1日国盟CISA每日一题
  4. 使用NSURLCache 数据缓存
  5. ubuntu 20上安装gdbgui
  6. CF-1147D Palindrome XOR (建图划分等价类)
  7. ocx可以被Java调用么_java调用ocx
  8. SQL常用日期处理函数(转)
  9. 腾讯与微软合作,准备应用Silverlight技术
  10. python2与python3,Python2和Python3的10大区别
  11. 导出excel 数据取一次合理还是分页取合理_一张报表模板替代数百张Excel表格,用它让报表工作更轻松...
  12. acs880变频器静态辨识_(完整版)ABB-ACS880变频器调试参数
  13. 红米6 Pro最简单卡刷开发版开启ROOT权限的教程
  14. 输油管的布置数学建模matlab,输油管布置的数学模型
  15. Excel对图片的组合以及选择
  16. 【github】上有意思的深度学习项目——照片漫画风
  17. 单片机---HLK-W801蓝牙遥控点灯
  18. 益丰大药房互联网医院,积极推动中国大健康产业发展变革
  19. NCUT 数据库基础 铁路购票系统
  20. wrap(),wrapAll(),wrapInner()的区别

热门文章

  1. el-popover超过固定高度后出现滚动条_「测绘精选」RTK测量不出现固定解的原因...
  2. 她花了8个月让骗子爱上自己,然后把骗子引到警察局......
  3. linux http 分析工具,技术|httpstat:一个检查网站性能的 curl 统计分析工具
  4. dubbo优势_Dubbo 迈出云原生重要一步 应用级服务发现解析
  5. 抓取手机https_python爬虫入门02:教你通过 Fiddler 进行手机抓包
  6. twitter mysql_twitter-mysql改进点
  7. php 分享微博,php微信分享到朋友圈、QQ、朋友、微博
  8. java 线程访问控件_C#多线程与跨线程访问界面控件的方法
  9. C# Task 循环任务_C# Task.Run调用外部参数
  10. linux 短信功能,Android调用系统短信功能发送短信