首页 > 其他分享 >C. Find B

C. Find B

时间:2024-02-28 17:25:27浏览次数:21  
标签:read sum 元素 Find while 区间 ll

原题链接

题解

给定数组c,和若干查询区间,请问能否改变区间中的每一个值且区间和还不变?

对于任意一个数,不是加就是减,而对于整个数组而言,加了多少就要减多少
而对于等于1的元素而言,只能加,因此我们令元素为1的为待加元素,其他元素均为待减元素
找出所有大于1的元素把他们变成一,然后差值累加到一个变量sum里
再判断1的个数k,看看sum能否补齐k的缺口,即sum>=k
如果k=0,即没有待加元素,但是指定任意一个元素为待加元素
那就判断区间大小是否大于等于2,即加和减的元素至少各有一个

code

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

ll pres[300005]={0};
ll add[300005]={0};

inline void read(ll &x) {  
    x = 0;
    ll flag = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = (x << 3) + (x << 1) + (c ^ 48); 
        c = getchar();
    }
    x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9) 
        write(x / 10);
    putchar(x % 10 + '0');
}

int main()
{
    ll t;
    read(t);
    while(t--)
    {
        ll n,q;
        read(n); read(q);
        for(ll i=1;i<=n;i++)
        {
            ll x;
            read(x);
            pres[i]=pres[i-1]+x-1;//区间和
            add[i]=add[i-1]+(x==1);//区间1的个数
        }
        while(q--)
        {
            ll x,y;
            read(x); read(y);
            ll k=add[y]-add[x-1],sum=pres[y]-pres[x-1];
            if(k&&sum>=k||!k&&y-x+1>=2) puts("YES");
            else puts("NO");
        }
    }
    return 0;
}

标签:read,sum,元素,Find,while,区间,ll
From: https://www.cnblogs.com/pure4knowledge/p/18041118

相关文章

  • C# List.Find()、List.FindAll()
    List.Find():获取List中第一个符合条件的元素,并返回该元素;List.FindAll():获取List中所有符合条件的元素,并最终返回一个列表。1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;45publicclassTest:MonoBehaviour6{7......
  • Python scipy.ndimage.find_objects用法及代码示例
    用法scipy.ndimage.find_objects(input,max_label=0)在标记数组中查找对象。参数:input:整数数组包含由不同标签定义的对象的数组。值为0的标签将被忽略。max_label:整数,可选要在输入中搜索的最大标签。如果没有给出max_label,则返回所有对象的位置。object_slices:元组......
  • 关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别
    findgoal.log.*.gz-mtime+2-execrm-rf{}\;findgoal.log.*.gz-mtime+3|xargsrm-f前言:find命令一直都是系统管理员的常用命令之一,其参数中“-exec”尤其实用。而“xargs”命令,针对查询也有属于自己的见解。本文着重讲解的是围绕find命令查询为主线,使用-exe......
  • mysql access denied for root ... mysqld –skip-grant-tables 命令失效 ... Failed
    <!--密码突然登录不上MySQL了,久了也不晓得是不是密码不正确...只能改密码...一年难得碰一次,感觉每次总有莫名其妙的问题--><!--修改方案只找到一个,就是无密码验证开启mysql服务,然后登录,设置新密码--><!--mysql版本不同有些命令无效,大概分高低两版本--><!--低版命令我......
  • [CF1923C] Find B
    CF1923C首先如果想着先满足第一个条件,使得b数组和a数组的和相同,再想着去凑第二个条件,会发现比较困难。那么不妨反过来,先尝试满足第二个条件。一个很简单的想法是,对于\(\forall1\lei\lem\),如果\(a_i=1\),那么令\(b_i=2\),否则\(b_i=1\)。这样,再考虑去满足第一个条件。此......
  • 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......