C. Increasing by Modulo
给定n个模m的数字
可以选择k个数字进行操作,操作时对该数字进行+1模m
求解最少多少次操作可以使得该数列变成单调不下降序列
实际上就是二分操作数目,其中操作数目肯定不会超过m
然后我们将左右边界变成0和m
二分操作数
以下几种情况可以进行操作 当前数字小于等于上一次保存的数字并且加上操作数>上一次的数字,也就说明该数可以进行操作,但是为了保证贪心,我们可以让该数字变化成上一次操作的数字,其实就是不改变上一次保存的数字,直接continue
如果当前数字大于上次保存的数字,并且+x-m之后可以>=上一次保存的数字,我们依旧可以不改变上一次保存的数字
如果不大于,就代表这我们一定要进行操作,能么上一次保存的数字必须改变了
如果当前数字+x小于上一次保存的数字,能么就代表该数列不能
#include <cstdio>
#include <iostream>
int n, m;
];
bool check(int x){
,i;
;i<=n;i++){
if(a[i]<=last && a[i]+x>=last || a[i]+x-m>=last) continue;
if(a[i]<last) break;
last=a[i];
}
;
}
int main(){
std::cin>>n>>m;
;i<=n;i++)
scanf("%d",&a[i]);
,r=m;
int ans;
while(l<=r){
;
if(check(mid)){
ans=mid;
r=mid-;
}else{
l=mid+;
}
}
printf("%d",ans);
;
}
C. Increasing by Modulo的更多相关文章
- Codeforces Round #562 (Div. 2) C. Increasing by Modulo
链接:https://codeforces.com/contest/1169/problem/C 题意: Toad Zitz has an array of integers, each intege ...
- CF1168A Increasing by Modulo
思路: 首先得做个转化,如果某个解法最终分别对a[i](i = 1, 2, ..., n)做了b[i](i = 1, 2, ..., n)次加1再取余的运算,那么可以等价地构造出x次(x = max( ...
- Codeforces 1168A Increasing by Modulo
题目链接:http://codeforces.com/problemset/problem/1168/A 题意:给一个数组,数组中元素范围为0~n,每次你可以选择若干元素进行(ai+1)%m的操作,问 ...
- LightOJ 1085(树状数组+离散化+DP,线段树)
All Possible Increasing Subsequences Time Limit:3000MS Memory Limit:65536KB 64bit IO Format: ...
- RE:ゼロから始める文化課生活
觉得有必要在NOI之前开一篇学习内容记录. 至于为什么要取这个标题呢?也许并没有什么特殊的借口吧. 5.23 在LOJ上搬了三道原题给大家考了考,然后大家都在考试就我一个人在划水. SSerxhs 和 ...
- [Done] Codeforces Round #562 (Div. 2) 题解
A - Circle Metro 模拟几百步就可以了. B - Pairs 爆搜一下,时间复杂度大概是 $O(4 * n)$ Code: 56306723 C - Increasing by Modu ...
- [LeetCode] Increasing Triplet Subsequence 递增的三元子序列
Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- [LeetCode] Longest Increasing Subsequence 最长递增子序列
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
随机推荐
- codeforces 632B B. Alice, Bob, Two Teams(暴力)
B. Alice, Bob, Two Teams time limit per test 1.5 seconds memory limit per test 256 megabytes input s ...
- Android学习路线01
part1:Java 1.Java基础 2.Java面向对象 3.数组与集合,异常,常用类 4.Io流 5.多线程socket编程 6.数据库,网络传输,数据解析 part2:Android 1.An ...
- Linux CentOS 6.5 64位 静默安装Oracle11g 云主机
本例: 通过SSH远程连接云主机,上传oracle11g安装包,在centos6.5上无图形化界面静默安装oracle11g. 涉及工具及环境: 1.本地环境windows7+ssh远程连接工具xSh ...
- 计算MySQL的内存峰值公式 (转)
-- 计算MySQL的内存峰值公式,计算所有的连接满了的情况下: select (@@key_buffer_size + @@query_cache_size + @@tmp_table_size ...
- js实现翻牌效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- centos7 查看启动ntp服务命令
标签(空格分隔): centos7 系统 1. 查看ntp服务命令: [root@node1 ~]# systemctl status ntpd * ntpd.service - Network Ti ...
- linux获取文件大小的函数
C语言fstat()函数:由文件描述词取得文件状态 头文件:#include <sys/stat.h> #include <unistd.h> 定义函数:int fstat ...
- Python-实现socket简单地连续发数据
只需用while条件判断来实现 服务器端 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import socket serv ...
- python编程范式培训文档,主要是结合4种代码和,对oop和面向过程编程区别和oop转化公式培训。
这是写得培训文档.代码例子在附件. 是经过深入考察 4个git项目里面,找出代码非常非常十分low.代码重复得吓人的的最本质原因.提炼出oop转化公式. 围绕附件中的4种代码写法思维来实现同一个任务, ...
- numpy和matlab计算协方差矩阵的不同(matlab是标准的,numpy相当于转置后计算)
matlab是标准的,numpy相当于转置后计算 >> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2] x = 2.0000 0 ...