Photoshop Layers

题目链接

ps:
题意:有n次操作,操作有两种①操作一:使这次操作后的颜色都为当前RGB,②操作二:使当前的颜色RGB为上一次操作的颜色的RGB加上输入的RGB,超过255时为255,现在有q次询问,每次询问输入l,r,问一颜色RGB初始为(00,00,00)的背景通过l-r的操作后是什么颜色

解析:模拟+前缀和
当操作是操作二时,RGB加上即可(不管上限),当是操作一时,直接赋值RGB即可

AcCode:

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>

const int N =2e5+100;

int arr[N][4];
int sum[N][4];

inline int min(int a,int b){return (a<b)?a:b;}

signed main(){
	int t;scanf("%d",&t);
	while(t--){
		int n,q;scanf("%d %d",&n,&q);
		for(int i=1,p;i<=n;i++){
			scanf("%d %X",&arr[i][0],&p);
			sum[i][3]=p%256;
			p>>=8;
			sum[i][2]=p%256;
			p>>=8;
			sum[i][1]=p;
			sum[i][0]=i;
			if(arr[i][0]==2){
				sum[i][0]=sum[i-1][0];
				sum[i][1]+=sum[i-1][1];
				sum[i][2]+=sum[i-1][2];
				sum[i][3]+=sum[i-1][3];
			}
		}
		while(q--){
			int l,r;scanf("%d %d",&l,&r);
			if(l>sum[r][0]) printf("%02X%02X%02X\n",min(sum[r][1]-sum[l-1][1],255),min(sum[r][2]-sum[l-1][2],255),min(sum[r][3]-sum[l-1][3],255));
			else printf("%02X%02X%02X\n",min(sum[r][1],255),min(sum[r][2],255),min(sum[r][3],255));
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值