JZOJ 2022.02.11【提高A组】模拟
\(\text{Solution}\)
首先把 \(T2\) 给切了,\(T1\) 找半天规律找不到
然后打了个表算是暴力了
\(T3\) 也暴。。。
太暴了。。。
\(T4\) 直接啥也不会
\(\text{T1}\)
考虑一个 \(a\) 的答案
\((c+b)(c-b)=a^2\) 或 \((c+b)(c-b)=(a+1)(a-1)\) 的 \(c,b\) 组数
就是一般的分类讨论了,记一个数 \(a\) 的答案为 \(f(a)\),\(d(a)\) 为 \(a\) 的约数个数
那么 \(2\nmid a,f(a)=d(a)/2\)
\(4\mid a,f(a)=d(a/4)/2\)
其余则为 \(0\)
具体考虑 \(a^2\) 和 \(a^2-1\) 的 \(f\) 值即可
\(\text{Code}\)
#include <cstdio>
#define RE register
using namespace std;
typedef long long LL;
const int N = 1e7 + 5;
int x, y, d[N], _d[N], num[N], tot, pr[N / 10], vis[N], ans;
void Sieve()
{
	d[1] = _d[1] = num[1] = 1;
	for(RE int i = 2; i <= 1e7 + 3; i++)
	{
		if (!vis[i]) pr[++tot] = i, d[i] = 2, num[i] = 1, _d[i] = 3;
		for(RE int j = 1, z; j <= tot && pr[j] * i <= 1e7 + 3; j++)
		{
			vis[z = i * pr[j]] = 1;
			if (i % pr[j] == 0)
			{
				num[z] = num[i] + 1, d[z] = d[i] / num[z] * (num[z] + 1);
				_d[z] = _d[i] / (num[i] * 2 + 1) * (num[z] * 2 + 1);
				break;
			}
			else d[z] = d[i] * 2, num[z] = 1, _d[z] = _d[i] * 3;
		}
	}
}
int main()
{
	Sieve(), scanf("%d%d", &x, &y);
	for(RE int a = x; a <= y; a++)
		if (a & 1) ans += (LL)_d[a] / 2 + (LL)d[(a + 1) / 2] * d[(a - 1) / 2] / 2;
		else ans += (LL)d[a + 1] * d[a - 1] / 2 + _d[a / 2] / 2;
	printf("%d\n", ans);
}
\(\text{T2}\)
一眼分位变成线段树赋值和异或操作
\(\text{Code}\)
#include <cstdio>
#define RE register
#define IN inline
using namespace std;
const int N = 5e4 + 5, LG = 9, SZ = N * 4, M = LG + 2;
int n, m, a[N];
struct SegmenTree{
	#define ls (p << 1)
	#define rs (ls | 1)
	int sum[SZ][M], tg1[SZ][M], tg2[SZ][M];
	IN void pushup(int p, int k){sum[p][k] = sum[ls][k] + sum[rs][k];}
	void build(int p, int l, int r)
	{
		for(RE int j = 0; j <= LG; j++) tg1[p][j] = -1;
		if (l == r)
		{
			for(RE int j = 0; j <= LG; j++) sum[p][j] = ((a[l] >> j) & 1);
			return;
		}
		int mid = l + r >> 1; build(ls, l, mid), build(rs, mid + 1, r);
		for(RE int j = 0; j <= LG; j++) pushup(p, j);
	}
	IN void push(int p, int k, int z, int l, int r)
	{
		if (z == 0 || z == 1) sum[p][k] = z * (r - l + 1), tg1[p][k] = z;
		else{
			sum[p][k] = r - l + 1 - sum[p][k], tg2[p][k] ^= 1;
			if (tg1[p][k] != -1) tg1[p][k] ^= 1;
		}
	}
	IN void pushdown(int p, int k, int l, int r)
	{
		int mid = l + r >> 1;
		if (tg2[p][k]) push(ls, k, 2, l, mid), push(rs, k, 2, mid + 1, r), tg2[p][k] = 0;
		if (tg1[p][k] != -1) push(ls, k, tg1[p][k], l, mid), push(rs, k, tg1[p][k], mid + 1, r), tg1[p][k] = -1;
	}
	void assign(int p, int l, int r, int k, int x, int y, int z)
	{
		if (x > r || y < l) return;
		if (x <= l && r <= y) return push(p, k, z, l, r), void();
		pushdown(p, k, l, r); int mid = l + r >> 1;
		if (x <= mid) assign(ls, l, mid, k, x, y, z);
		if (y > mid) assign(rs, mid + 1, r, k, x, y, z);
		pushup(p, k);
	}
	void reverse(int p, int l, int r, int k, int x, int y)
	{
		if (x > r || y < l) return;
		if (x <= l && r <= y) return push(p, k, 2, l, r), void();
		pushdown(p, k, l, r); int mid = l + r >> 1;
		if (x <= mid) reverse(ls, l, mid, k, x, y);
		if (y > mid) reverse(rs, mid + 1, r, k, x, y);
		pushup(p, k);
	}
	int Query(int p, int l, int r, int k, int x, int y)
	{
		if (x > r || y < l) return 0;
		if (x <= l && r <= y) return sum[p][k];
		pushdown(p, k, l, r); int mid = l + r >> 1, res = 0;
		if (x <= mid) res = Query(ls, l, mid, k, x, y);
		if (y > mid) res += Query(rs, mid + 1, r, k, x, y);
		return res;
	}
}T;
int main()
{
	scanf("%d%d", &n, &m);
	for(RE int i = 1; i <= n; i++) scanf("%d", &a[i]);
	T.build(1, 1, n); char op[10];
	for(RE int l, r, x; m; --m)
	{
		scanf("%s%d%d", op, &l, &r);
		if (op[0] == 'a'){
			scanf("%d", &x);
			for(RE int j = 0; j <= LG; j++) if (!((x >> j) & 1)) T.assign(1, 1, n, j, l, r, 0);
		}
		else if (op[0] == 'o'){
			scanf("%d", &x);
			for(RE int j = 0; j <= LG; j++) if ((x >> j) & 1) T.assign(1, 1, n, j, l, r, 1);
		}
		else if (op[0] == 'x'){
			scanf("%d", &x);
			for(RE int j = 0; j <= LG; j++) if ((x >> j) & 1) T.reverse(1, 1, n, j, l, r);
		}
		else if (op[1] == 'x'){
			int res = 0, z;
			for(RE int j = 0; j <= LG; j++) z = T.Query(1, 1, n, j, l, r), res += ((z & 1) ? (1 << j) : 0);
			printf("%d\n", res);
		}
		else{
			int res = 0, z;
			for(RE int j = 0; j <= LG; j++) z = T.Query(1, 1, n, j, l, r), res += z * (1 << j);
			printf("%d\n", res);
		}
	}
}
												
											JZOJ 2022.02.11【提高A组】模拟的更多相关文章
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)
		
5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...
 - JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团
		
100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits Got ...
 - JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
		
5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms ...
 - JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间
		
5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms Memo ...
 - JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数
		
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms Memory Limits: 262144 KB Detailed ...
 - JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线
		
5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...
 - JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
		
5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...
 - JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)
		
5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...
 - JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林  (Standard IO)
		
5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...
 - [JZOJ]100047. 【NOIP2017提高A组模拟7.14】基因变异
		
21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的变异息息相关,考察基因变 ...
 
随机推荐
- 在Linux配置git
			
生成ssh ssh-keygen -t rsa 可以不设置密码,一路回车就行,会在 ~/.ssh/下生成两个ssh key: ssh-add ~/.ssh/id_rsa.pub 这一步是使用刚才生成那 ...
 - 解决 linux mint 安装显卡驱动失败解决
			
前言 安装显卡驱动的基本流程就是,禁用 nouveau驱动,然后安装 nnvidia驱动,然后重启电脑.但是我重新启动, 使用NVIDIA X Server Settings查看一直显示空白,毫无疑问 ...
 - 私藏!资深数据专家SQL效率优化技巧 ⛵
			
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 本文地址:https://www.showmeai.tech/artic ...
 - 【Shell案例】【awk map计数&sort按指定列排序】9、统计每个单词出现的个数
			
描述写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数. 为了简单起见,你可以假设:nowcoder.txt只包括小写字母和空格.每个单词只由小写字母组成.单词间由 ...
 - Kubernetes(k8s)存储管理之数据卷volumes(一):volumes的引入和emptyDir数据卷
			
目录 一.系统环境 二.前言 三.Docker数据卷volumes 四.Kubernetes 数据卷volumes 4.1 有状态容器和无状态容器 4.2 Kubernetes 数据卷volumes解 ...
 - 解决aspnetcore-browser-refresh.js:234 WebSocket connection to 'wss://localhost:62356/Admin/' failed问题
			
前言 前段时间升级了Visual Studio到v17.1.1最新版本,然后今天来运行之前的一个.net5项目一直提示:aspnetcore-browser-refresh.js:234 WebSoc ...
 - 瞧瞧别人家的API接口,那叫一个优雅
			
前言 在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用. 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性.可重复调用.稳定 ...
 - 判断条件为NULL
			
在ASCII码表里NULL的二进制位0.所以NULL作为判断条件时,表示为假的意思. ASCII表 二进制 字符 ...
 - [深度学习] caffe分类模型训练、结果可视化、部署及量化笔记
			
本文为本人caffe分类网络训练.结果可视化.部署及量化具体过程的心得笔记.caffe目前官方已经停止支持了,但是caffe是目前工业落地最常用的深度学习框架,用的人挺多.其实主要怕自己忘了,弄个备份 ...
 - P1848 [USACO12OPEN]Bookshelf G
			
简要题意 给你 \(N\) 本书 \((h_i,w_i)\),你要将书分成任意段(顺序不能改变),使得每一段 \(j\) 中 \(\sum\limits_{i \in j} w_i \leq L\), ...