记录编号 611947 评测结果 AAAAAAAAAA
题目名称 我能在摸鱼被发现的情况下躲避教练的视奸吗 最终得分 100
用户昵称 GravatarRpUtl 是否通过 通过
代码语言 C++ 运行时间 1.605 s
提交时间 2026-02-07 16:40:39 内存使用 24.61 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef unsigned int ui;
const int N=1e6+10;
const int M=5e6+10;
namespace FastIO {
// ------------------------------
// #define IN_HAS_NEG
// #define OUT_HAS_NEG
// #define CHK_EOF
#define DISABLE_MMAP
// ------------------------------
#if __cplusplus < 201400
#error Please use C++14 or higher.
#endif
#if __cplusplus > 201700
#define INLINE_V inline
#else
#define INLINE_V
#endif
#if (defined(LOCAL) || defined(_WIN32)) && !defined(DISABLE_MMAP)
#define DISABLE_MMAP
#endif
#ifndef DISABLE_MMAP
#include <sys/mman.h>
#endif
#ifdef LOCAL
	inline char gc() { return getchar(); }
	inline void pc(char c) { putchar(c); }
#else
#ifdef DISABLE_MMAP
	INLINE_V constexpr int _READ_SIZE = 1 << 18;
	INLINE_V static char _read_buffer[_READ_SIZE], *_read_ptr = nullptr,
	*_read_ptr_end = nullptr;
	inline char gc() {
		if (__builtin_expect(_read_ptr == _read_ptr_end, false)) {
			_read_ptr = _read_buffer;
			_read_ptr_end =
			_read_buffer + fread(_read_buffer, 1, _READ_SIZE, stdin);
#ifdef CHK_EOF
			if (__builtin_expect(_read_ptr == _read_ptr_end, false)) return EOF;
#endif
		}
		return *_read_ptr++;
	}
#else
	INLINE_V static const char *_read_ptr =
	(const char *)mmap(nullptr, INT_MAX, 1, 2, 0, 0);
	inline char gc() { return *_read_ptr++; }
#endif
	INLINE_V constexpr int _WRITE_SIZE = 1 << 18;
	INLINE_V static char _write_buffer[_WRITE_SIZE], *_write_ptr = _write_buffer;
	inline void pc(char c) {
		*_write_ptr++ = c;
		if (__builtin_expect(_write_buffer + _WRITE_SIZE == _write_ptr, false)) {
			fwrite(_write_buffer, 1, _write_ptr - _write_buffer, stdout);
			_write_ptr = _write_buffer;
		}
	}
	INLINE_V struct _auto_flush {
		~_auto_flush() {
			fwrite(_write_buffer, 1, _write_ptr - _write_buffer, stdout);
		}
	} _auto_flush;
#endif
#ifdef CHK_EOF
	inline bool _isdigit(char c) { return (c & 16) && c != EOF; }
	inline bool _isgraph(char c) { return c > 32 && c != EOF; }
#else
	inline bool _isdigit(char c) { return c & 16; }
	inline bool _isgraph(char c) { return c > 32; }
#endif
	template <class T>
	INLINE_V constexpr bool _is_integer = numeric_limits<T>::is_integer;
	template <class T>
	INLINE_V constexpr bool _is_signed = numeric_limits<T>::is_signed;
	template <class T>
	INLINE_V constexpr bool _is_unsigned = _is_integer<T> && !_is_signed<T>;
	template <>
	INLINE_V constexpr bool _is_integer<__int128> = true;
	template <>
	INLINE_V constexpr bool _is_integer<__uint128_t> = true;
	template <>
	INLINE_V constexpr bool _is_signed<__int128> = true;
	template <>
	INLINE_V constexpr bool _is_unsigned<__uint128_t> = true;
#undef INLINE_V
	inline void read(char &c) {
		do c = gc();
		while (!_isgraph(c));
	}
	inline void read_cstr(char *s) {
		char c = gc();
		while (!_isgraph(c)) c = gc();
		while (_isgraph(c)) *s++ = c, c = gc();
		*s = 0;
	}
	inline void read(string &s) {
		char c = gc();
		s.clear();
		while (!_isgraph(c)) c = gc();
		while (_isgraph(c)) s.push_back(c), c = gc();
	}
#ifdef IN_HAS_NEG
	template <class T, enable_if_t<_is_signed<T>, int> = 0>
	inline void read(T &x) {
		char c = gc();
		bool f = true;
		x = 0;
		while (!_isdigit(c)) {
			if (c == 45) f = false;
			c = gc();
		}
		if (f)
			while (_isdigit(c)) x = x * 10 + (c & 15), c = gc();
		else
			while (_isdigit(c)) x = x * 10 - (c & 15), c = gc();
	}
	template <class T, enable_if_t<_is_unsigned<T>, int> = 0>
#else
	template <class T, enable_if_t<_is_integer<T>, int> = 0>
#endif
	inline void read(T &x) {
		char c = gc();
		while (!_isdigit(c)) c = gc();
		x = 0;
		while (_isdigit(c)) x = x * 10 + (c & 15), c = gc();
	}
	inline void write(char c) { pc(c); }
	inline void write_cstr(const char *s) {
		while (*s) pc(*s++);
	}
	inline void write(const string &s) {
		for (char c : s) pc(c);
	}
#ifdef OUT_HAS_NEG
	template <class T, enable_if_t<_is_signed<T>, int> = 0>
	inline void write(T x) {
		char buffer[numeric_limits<T>::digits10 + 1];
		int digits = 0;
		if (x >= 0) do
			buffer[digits++] = (x % 10) | 48, x /= 10;
		while (x);
		else {
			pc(45);
			do buffer[digits++] = -(x % 10) | 48, x /= 10;
			while (x);
		}
		while (digits) pc(buffer[--digits]);
	}
	template <class T, enable_if_t<_is_unsigned<T>, int> = 0>
#else
	template <class T, enable_if_t<_is_integer<T>, int> = 0>
#endif
	inline void write(T x) {
		char buffer[numeric_limits<T>::digits10 + 1];
		int digits = 0;
		do buffer[digits++] = (x % 10) | 48, x /= 10;
		while (x);
		while (digits) pc(buffer[--digits]);
	}
	template <int N>
	struct _tuple_io_helper {
		template <class... T>
		static inline void _read(tuple<T...> &x) {
			_tuple_io_helper<N - 1>::_read(x), read(get<N - 1>(x));
		}
		template <class... T>
		static inline void _write(const tuple<T...> &x) {
			_tuple_io_helper<N - 1>::_write(x), pc(32), write(get<N - 1>(x));
		}
	};
	template <>
	struct _tuple_io_helper<1> {
		template <class... T>
		static inline void _read(tuple<T...> &x) {
			read(get<0>(x));
		}
		template <class... T>
		static inline void _write(const tuple<T...> &x) {
			write(get<0>(x));
		}
	};
	template <class... T>
	inline void read(tuple<T...> &x) {
		_tuple_io_helper<sizeof...(T)>::_read(x);
	}
	template <class... T>
	inline void write(const tuple<T...> &x) {
		_tuple_io_helper<sizeof...(T)>::_write(x);
	}
	template <class T1, class T2>
	inline void read(pair<T1, T2> &x) {
		read(x.first), read(x.second);
	}
	template <class T1, class T2>
	inline void write(const pair<T1, T2> &x) {
		write(x.first), pc(32), write(x.second);
	}
	template <class T1, class... T2>
	inline void read(T1 &x, T2 &...y) {
		read(x), read(y...);
	}
	template <class... T>
	inline void read_cstr(char *x, T *...y) {
		read_cstr(x), read_cstr(y...);
	}
	template <class T1, class... T2>
	inline void write(const T1 &x, const T2 &...y) {
		write(x), write(y...);
	}
	template <class... T>
	inline void write_cstr(const char *x, const T *...y) {
		write_cstr(x), write_cstr(y...);
	}
	template <class T>
	inline void print(const T &x) {
		write(x);
	}
	inline void print_cstr(const char *x) { write_cstr(x); }
	template <class T1, class... T2>
	inline void print(const T1 &x, const T2 &...y) {
		print(x), pc(32), print(y...);
	}
	template <class... T>
	inline void print_cstr(const char *x, const T *...y) {
		print_cstr(x), print_cstr(y...);
	}
	inline void println() {}
	inline void println_cstr() {}
	template <class... T>
	inline void println(const T &...x) {
		print(x...), pc(10);
	}
	template <class... T>
	inline void println_cstr(const T *...x) {
		print_cstr(x...), pc(10);
	}
}  
using namespace FastIO;
pair<int,int>q[M];
int n,m,p[M],cnt[N],lst[N],i,l,r,k;
ui a[N],b[N],c[N],s[N],hs[N],g[N],ans[M],A,B,C;
int main(){
	freopen("shijian.in","r",stdin);
	freopen("shijian.out","w",stdout); 
	read(n),read(m);
	for(i=1;i<=n;i=-~i)read(a[i]);
	for(i=1;i<=n;i=-~i)read(b[i]);
	for(i=1;i<=n;i=-~i)read(c[i]);
	for(i=1;i<=m;i=-~i){
		read(q[i].fi),read(q[i].se);
		++cnt[q[i].se];
	}
	for(i=1;i<=n;i=-~i)cnt[i]+=cnt[i-1];
	for(i=1;i<=m;i=-~i)p[cnt[q[i].se]--]=i;
	for(r=1,i=1;r<=n;r=-~r){
		l=r;
		while(--l){
			A=(a[l]&a[r]),B=(b[l]|b[r]),C=__gcd(c[l],c[r]);
			if(A==a[l]&&B==b[l]&&C==c[l])break;
			a[l]=A,b[l]=B,c[l]=C;
		}
		for(k=l+1;k<r;++k){
			hs[k]+=s[k]*(r-lst[k]);
			s[k]=s[k-1]+a[k]*b[k]*c[k],lst[k]=r;
		}
		s[r]=s[r-1]+a[r]*b[r]*c[r];
		lst[r]=r+1,g[r]=s[r]+g[r-1];
		while(q[p[i]].se==r){
			l=q[p[i]].fi;
			ans[p[i]]=g[r]-g[l-1]-hs[l-1]-s[l-1]*(r-lst[l-1]+1);
			i=-~i;
		}
	}
	if(m<=1e5){
		for(int i(1);i<=m;++i){
			printf("%u\n",ans[i]);
		}
	}else{
		unsigned int res=0;
		for(int i(1);i<=m;++i){
			res^=ans[i];
		}
		printf("%u\n",res);
	}
	return 0;
}