涂色
时间限制: 3000MS
内存限制: 589824KB
题目描述:
给出一个数组。你需要求出按顺序对其进行一系列区间操作后最终所得的数组。
操作有三种:
将下标在L到R之间的元素全部或上X。
将下标在L到R之间的元素全部与上X。
将下标在L到R之间的元素全部设为X。
输入描述
第一行有一个正整数N(1<=N<=100000),代表数组的长度。
第二行有N个非负整数,范围在0到2^20-1之间,代表数组中的元素。
第三行有一个正整数M(1<=M<=100000),代表操作次数。
第四行有M个正整数,代表M次操作中的区间左端点L。
第五行有M个正整数,代表M次操作中的区间右端点R。
第六行是一个长度为M的字符串,|代表操作1,&代表操作2,=代表操作3。
第七行有M个正整数,代表M次操作中的参数X。
输出描述
在一行中输出N个数,代表所有操作按顺序完成后最终所得的数组。
样例输入
4
5 4 7 4
4
1 2 3 2
4 3 4 2
=|&=
8 3 6 2
样例输出
8 2 2 0
Java实现:
public class Tuse {
public static void operate(char f,int[] num,int left,int right,int x){
if(f=='='){
for(int i=left;i<=right;i++){
num[i]=x;
}
}else if(f=='|'){
for(int i=left;i<=right;i++){
num[i]=num[i]|x;
}
}else{
//&
for(int i=left;i<=right;i++){
num[i]=num[i]&x;
}
}
}
public static void main(String[] args) {