首页 > 其他分享 >【题解】洛谷P6225: [eJOI2019] 异或橙子

【题解】洛谷P6225: [eJOI2019] 异或橙子

时间:2024-12-07 19:21:05浏览次数:5  
标签:eJOI2019 洛谷 int 题解 t2 异或 t1 add define

P6225 [eJOI2019] 异或橙子

结论题,要手玩几组样例就懂了,发现长度为偶数的最后削为0,否则的话下标为奇数答案就是区间下标为奇数的异或和,偶数相同,所以考虑用两个树状数组分别维护下标奇偶数的异或前缀和,然后再异或区间。

#include <bits/stdc++.h>
//#define int long long
#define ls p<<1
#define rs p<<1|1 
#define re register 
#define pb push_back
#define pir pair<int,int>
#define f(a,x,i) for(int i=a;i<=x;i++)
#define fr(a,x,i) for(int i=a;i>=x;i--)
#define lb(x) x&(-x);
const int N=2e5+10;
const int mod=1e9+7;
using namespace std;

int n,m;
int a[N];
int t1[N];
int t2[N];

void add(int *t,int x,int k){
	while(x<=200000){
		t[x]^=k;
		x+=lb(x);
	}
}

int query(int *t,int x){
	int sum=0;
	while(x){
		sum^=t[x];
		x-=lb(x);
	}
	return sum;
}

signed main(){
//	freopen("xp1.in","r",stdin);
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cin>>n>>m;
    
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    	if(i&1){
    		add(t1,i,a[i]);
		}
		else{
			add(t2,i,a[i]);
		}
	}
    
    while(m--){
    	int op,l,r;
    	cin>>op>>l>>r;
    	if(op&1){
    		if(l&1){
    			add(t1,l,a[l]);
				a[l]=r;
				add(t1,l,r); 
			} 
			else{
				add(t2,l,a[l]);
				a[l]=r;
				add(t2,l,r); 
			}
		}
		else{
			if((r-l)&1){
				cout<<"0\n";
				continue;
			}
			else{
				if(l&1){
					cout<<(query(t1,r)^query(t1,l-1))<<"\n";
				}
				else{
					cout<<(query(t2,r)^query(t2,l-1))<<"\n";
				}
			} 	
		}
	}
	return 0;
}

标签:eJOI2019,洛谷,int,题解,t2,异或,t1,add,define
From: https://www.cnblogs.com/sadlin/p/18592566

相关文章

  • 信奥赛CSP-J复赛集训(dfs专题)(11):洛谷P1036:[NOIP2002 普及组] 选数
    信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(11):洛谷P1036:[NOIP2002普及组]选数题目描述已知nnn个整数x......
  • 信奥赛CSP-J复赛集训(dfs专题)(12):洛谷P2404:自然数的拆分问题
    信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(12):洛谷P2404:自然数的拆分问题题目描述任何一个大于111的自然数n......
  • CF2045H - Missing Separators 题解
    CF2045H-MissingSeparators题面您有一本字典,它是按字母顺序排列的多个单词的列表。每个单词都由大写英文字母组成。您想打印这本字典。然而,打印系统出现了一个错误,列表中的所有单词都紧挨着打印,单词之间没有任何分隔符。现在,您最终得到的字符串\(S\)是字典中所有单词按照......
  • 蓝桥杯 2024 省赛 C++ B组 R 格式 (JAVA面向对象 高精度 纯api题解)
    解题思路:由于数位较大这里采用高精度,又因为高精度写起来比较麻烦所以这里直接采用JAVAapi中的高精度浮点数类型和高精度整数类型,应为高精度浮点数类型四舍五入较为麻烦所以这里改为手动四舍五入importjava.math.BigDecimal;importjava.math.BigInteger;importjava.util......
  • 接龙数列(第十四届蓝桥杯C++B组JAVA题解 动态规划)
    对于一个长度为 KK 的整数数列:A1,A2,...,AK,我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1 的末位数字(2≤i≤K)。例如 12,23,35,56,61,11是接龙数列;12,23,34,56不是接龙数列,因为 56的首位数字不等于 3434 的末位数字。所有长度为 11 的整数数列都......
  • 洛谷 P1359 租用游艇 C语言 记忆化搜索
    题目:https://www.luogu.com.cn/problem/P1359题目描述长江游艇俱乐部在长江上设置了 n 个游艇出租站 1,2,⋯ ,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i 到游艇出租站 j 之间的租金为r(i,j)(1≤i<j≤n)。试设计一个算......
  • 洛谷 P1553 数字反转(升级版) C语言 stl
    题目:https://www.luogu.com.cn/problem/P1553题目背景以下为原题面,仅供参考:给定一个数,请将该数各个位上数字反转得到一个新数。这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分......
  • 题解:AtCoder Beginner Contest AT_abc380_d ABC380D Strange Mirroring
    题目大意给定一个字符串$S$,执行$10^{100}$次以下操作:首先,令字符串$T$为字符串$S$中所有大写字母变为小写字母,小写字母变为大写字母的结果。其次,将$T$拼接在$S$后面。接下来,有一些询问:请输出在所有操作执行完成之后$S$的第$K$个字母。思路乍一看,好大的数......
  • 题解:AtCoder Beginner Contest AT_abc373_d ABC373D Hidden Weights
    题目传送门题目翻译给你一个$N$个点,$M$条边的有向图,其中边有边权。现在让你给每一个点设置一个点权$a$,使得对于任意两点$x$和$y$,如果$x$到$y$有一条边,边权为$w$,那么需要满足$a_y-a_x=w$。现在让你输出一组合法的分配方案,题目保证存在,输出任意一组都行。思路1(注意......
  • 题解:[USACO07DEC] Sightseeing Cows G
    洛谷P2868题目大意有个$n$个点,$m$条边的有向图,点有点权,边有边权。现在要找出一个环,使得点权和与边权和的比值最大。思路既然说要使得点权和与边权和的比值最大,那么就会想到$01$分数规划。二分答案就不用说了,重点是这个$check$函数。$01$分数规划的板子中要检查的是......