首页 > 其他分享 >CF1744B Even-Odd Increments

CF1744B Even-Odd Increments

时间:2022-10-24 23:35:18浏览次数:61  
标签:Even even Increments 奇数 int Odd sum 偶数 odd

简要题意

\(T\) 组数据,每组数据给定一个长度为 \(n\) 的数列,有 \(q\) 次操作,共有两种操作:

  • \(\texttt{0 x}\),给数列中所有偶数加上 \(x\);
  • \(\texttt{1 x}\),给数列中所有奇数加上 \(x\);

每一次操作结束后,输出数列的和。

\(1 \leq T \leq 10^{4},1 \leq n,q \leq 10^{5}\)

思路

相当巧妙的一道思维题。

首先,如果直接暴力搞貌似不太行,线段树太难写,而且也没有区间操作。

其实这道题有一个更简单的做法,首先,如果 \(x\) 时奇数,那么在 \(0\) 操作中所有数都会变成偶数,在 \(1\) 操作中所有数都会变成奇数。(因为奇数加奇数为偶数,奇数加偶数为奇数,偶数加偶数为偶数)。再维护一个全局和,你发现就可以 \(O(1)\) 操作了。

整体时间复杂度 \(O(T(n+q))\)。

代码

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

int odd,even,sum,n,q,a[100005];

void solve(){
	odd=0;even=0;sum=0;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum += a[i];
		if(a[i]&1)odd++;
		else even++;
	}
	while(q--){
		int op,x;
		cin>>op>>x;
		if(op==0){
			sum += even*x;
			if(x&1){
				odd=n;
				even=0;
			}
		}
		else{
			sum += odd*x;
			if(x&1){
				even=n;
				odd=0;
			}
		}
		cout<<sum<<'\n';
	}
}

signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

标签:Even,even,Increments,奇数,int,Odd,sum,偶数,odd
From: https://www.cnblogs.com/zheyuanxie/p/cf1744b.html

相关文章

  • App - Appium系统Keyevent详解
    1.keyevent()键盘事件只限于安卓设备使用。fromappiumimportwebdriverimporttimedesired_caps={"platformName":"Android",#测试版本(IOS/Android)"de......
  • 【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defra
    问题描述CloudServiceWorkerRoleWorkerrole突然停机,查看Events,发现是错误源为Defrag。错误消息:ThevolumeWindowswasnotoptimizedbecauseanerrorwasenco......
  • Jodd
     Jodd=tools+ioc+mvc+db+aop+tx+json+html<1.7Mb  JoddissetofJavamicroframeworks,toolsandutilities,under1.7MB.Webelieveincommon......
  • 复合事件处理(Complex Event Processing)介绍
    复合事件是由史丹佛大学的DavidLuckham与BrianFraseca所提出,DavidLuckham与BrianFraseca于1990年提出复合事件架构,使用模式比对、事件的相互关系......
  • AttachedEventsToCommand
    可以使用handycontrol里的类,behavior里的不可以使用,因为它只支持RoutedEvent<hc:Interaction.Triggers><hc:RoutedEventTriggerRoutedEvent="{x:StaticValidation.......
  • 基于AD Event日志识别域用户密码攻击
    01、简介针对域用户密码攻击,攻击者通常都会使用两种攻击方式进行测试,即:暴力破解(BruteForce)和密码喷洒(PasswordSpraying)。暴力破解(BruteForce)攻击,攻击者通过利用大量......
  • 基于AD Event日志识别DCSync攻击
     01、简介DCSync攻击是一种常见的域控攻击方法,利用DCSync导出域内用户的哈希值,本质上就是利用DRS(DirectoryReplicationService)协议通过IDL_DRSGetNCChanges从域控......
  • 基于AD Event日志识别DCShadow攻击
    01、简介DCShadow攻击,是攻击者在获取到域管理员权限后,通过将沦陷的主机伪造成域控,将预先设定的对象或对象属性复制到正在运行的域控服务器中。DCSync&DCShadow区别在于,DC......
  • drools_08_event_listener
    KieSession除了提供丰富的API外,还提供三个eventlistener,方便对于规则执行状况的监控.AgendaEventListener该接口可以监控rule被fire,所以这个listener最常用,......
  • 只需三步 带你了解 Vue事件总线(EventBus)
    第一步:直接在项目中的 main.js 初始化 EventBus ://main.jsVue.prototype.$EventBus=newVue()第二步:找到两个页面A和B,A向B发送事件<!--A.vue--><templat......