首页 > 其他分享 >[CF1923C] Find B

[CF1923C] Find B

时间:2024-02-24 14:22:25浏览次数:29  
标签:CF1923C le int sum 满足 数组 条件 Find

CF1923C

首先如果想着先满足第一个条件,使得b数组和a数组的和相同,再想着去凑第二个条件,会发现比较困难。那么不妨反过来,先尝试满足第二个条件。一个很简单的想法是,对于 \(\forall 1\le i\le m\), 如果 \(a_i = 1\),那么令 \(b_i=2\) ,否则\(b_i=1\) 。这样,再考虑去满足第一个条件。此时的b数组是满足第二、三个条件的和最小的数组。那么如果此时 \(\sum b_i > \sum a_i\) ,则第一个条件永远无法满足,直接输出 No 即可。要是 \(\sum b_i = \sum a_i\) ,此时就已经构造出了满足第一个条件的b数组,输出 Yes 。否则,计算 \(\sum a_i - \sum b_i\) ,加到一个 \(b_i\) 上即可构造出满足第一个条件的b数组啦。这个是很好证明的。只要有一个 \(b_i = 2\),那么对应的 \(a_i=1\) ,加上去 \(b_i \ne a_i\) 。如果 \(\forall 1 \le i \le m\),\(b_i = 1\),那么随便加到一个 \(b_i\) 上,很容易发现 \(b_i > a_i\)。输出 Yes 就好啦。

code:

#include<bits/stdc++.h>
using namespace std;

#define N 300010
#define int long long

int n, q;

void solve(){
  cin >> n >> q;
  vector<int> a(n+1), s(n+1), p(n+1);
  for(int i = 1; i <= n; i ++){
    cin >> a[i];
    p[i] = p[i - 1] + (a[i] == 1 ? 1 : 0); //前缀和记录a中等于1的数有多少
    s[i] = s[i - 1] + a[i];                
  }
  while(q--){
    int l, r;
    cin >> l >> r;
    if(l == r) {cout << "No" << endl;continue;}
    int ts = (p[r] - p[l - 1]) * 2 + (r - l + 1 - p[r] + p[l - 1]); //计算满足第二、三个条件的b数组的和
    if(ts > s[r] - s[l - 1]){          
      cout << "No" << endl;
    }
    else cout << "Yes" << endl;
  }
}

signed main(){
//   freopen("shuju.in", "r", stdin);
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int TN;
  cin >> TN;
  while(TN--){
    solve();
  }
  return 0;
}

标签:CF1923C,le,int,sum,满足,数组,条件,Find
From: https://www.cnblogs.com/yduck/p/18031035

相关文章

  • windows下c++遍历各个磁盘的所有文件,不知道为什么FindFirstFileA文件会报错,进而程序退
    下面的程序还有一些问题,比如360的一些目录就用FindFirstFileA函数打开错误;还有  C:\Windows\System32\WebThreatDefSvc ,属性只有 DIRECTORY,用函数 _access检查也没有问题,但是就是用FindFirstFileA打开的时候错误;至今没有想到解决办法,只能临时跳过这种目录。 #include......
  • day10_管道符与grep与find
    关于代码文件和图片文件的存放务必搞清楚,绝对路径和相对路径关于linux命令执行的结果,以及后续处理关于文件打开的底层流程(文件句柄的概念)tail-f用法1.要求被检测的文件,存在2.可以tail-f检测关于html乱码以及UTF-8编码表的概念字节和字符挂钩的简单记忆1.查......
  • [LeetCode] 2108. Find First Palindromic String in the Array
    Givenanarrayofstringswords,returnthefirstpalindromicstringinthearray.Ifthereisnosuchstring,returnanemptystring"".Astringispalindromicifitreadsthesameforwardandbackward.Example1:Input:words=["abc&quo......
  • D. Find the Different Ones!
    前言拿到题目首先看数据量,n,q都是2e5的数量级,如果是暴力解的话时间复杂度会达到O(m*n)(最差情况m次询问,每次l和r为1和n),很明显会超时。这就意味着我们要在线性的时间内完成查询,即每次询问的查询时间保证在O(1)。题解准备一个数组b存储该连续相同数字串的起始点,然后我们从左向右遍历......
  • D. Find the Different Ones!
    原题链接核心\(p[i]\)代表离\(a[i]\)最近的不同元素code#include<bits/stdc++.h>usingnamespacestd;inta[200005]={0};intp[200005]={0};intmain(){intt;cin>>t;while(t--){intn;cin>>n;for(inti=1......
  • 153. Find Minimum in Rotated Sorted Array
    题目Supposeanarraysortedinascendingorderisrotatedatsomepivotunknowntoyoubeforehand.(i.e., [0,1,2,4,5,6,7] mightbecome [4,5,6,7,0,1,2]).Findtheminelement.Youmayassumenoduplicateexistsinthearray.Example1:Input:[3,4,5,1,2]O......
  • Find The MultipleC++
    这题就是找N的倍数m,M要求是由1和0组成且非0。可以用图来看,从1出发临边是1和0,然后广度遍历,第一个能能整除N的数输出就行。#include<iostream>#include<queue>usingnamespacestd;intmain(){intn=-1;while(cin>>n){if(n==0)break;longlon......
  • fatal: couldn't find remote ref master 问题解决!
    这个错误信息通常出现在使用Git命令尝试从远程仓库克隆、拉取(pull)或推送(push)时,指定的分支(在这个案例中是master)在远程仓库中不存在。这种情况可能由以下几个原因导致:1.分支名称错误远程仓库中不存在名为master的分支:随着Git和GitHub的更新,master分支被重新命名为main......
  • find命令
    当前目录搜索所有文件,文件内容包含“140.206.111.111”的内容find.-typef-name"*"|xargsgrep"140.206.111.111"列出当前目录及子目录下所有文件和文件夹find.在/home目录下查找以.txt结尾的文件名find/home-name"*.txt"同上,但忽略大小写fin......
  • 比较以下Unity AStar Pathfinding, NavMesh, Recast Navigation 寻路算法的优点与缺点
    一、AStarPathfindingAStarPathfinding是一种基于图搜索的寻路算法,它使用启发式搜索来找到最短路径。AStarPathfinding的优点包括:高效性:AStarPathfinding是一种高效的寻路算法,因为它使用启发式搜索来找到最短路径,可以大大减少搜索空间,从而提高寻路速度。灵活性:AStarPathf......