首页 > 其他分享 >CF1935E Distance Learning Courses in MAC

CF1935E Distance Learning Courses in MAC

时间:2024-03-06 15:45:59浏览次数:21  
标签:uor p1 int lst 贡献 Courses MAC CF1935E sg

CF1935E Distance Learning Courses in MAC

题目大意

给定 \(n\) 个变量 \(z_i\in[x_i,y_i]\),你可以在范围内任意指定 \(z_i\) 的值。
\(q\) 次查询,每次查询给定区间 \([l_i,r_i]\),求用这些变量得到的 二进制或 最大值。

思路

选择 \(z\in[x,y]\),贡献分为两部分

(1) \([x,y]\) 的公共前缀,这一部分贡献恒定
(2) 在第一个不同的位置,\(y\) 一定为 \(1\),\(x\) 一定为 \(0\)
(i) 若要求贡献的这一位为 \(1\),那么可以给到一个 \(\leq y\) 的任意值。
(ii) 否则,一定可以给到后面的所有位均为 \(1\)。

Solution1

查询时,先将所有恒定贡献求或
从高位开始查询所有位置,判断是否有 (2) 类贡献
若没有 (2) 类贡献,跳过
若有 2 个 (2) 类贡献,或这这一位已经为 1,则从这一位往后都直接给 1 (对应 (ii))
若只有一个,设为 \(y\),则依次考虑当前答案中为 \(0\) 的位,能给 1 就给 1 (对应 (i))。

#include <cstdio>
 
const int N = 2e5 + 10;
 
int T, n, m;
int c[N][30], z[N][30], lst[N][30];
int s[N];
 
int all(int n) { return (1 << n) - 1; }
int lg(int x) { return 31 - __builtin_clz(x); }
 
int main() {
	for(scanf("%d", &T); T--; ) {
		scanf("%d", &n);
		for(int i = 1, x, y; i <= n; ++i) {
			scanf("%d%d", &x, &y);
			int l = x & ~all(lg(x ^ y) + 1);
			for(int j = 0; j < 30; ++j) 
				c[i][j] = c[i - 1][j] + ((l >> j) & 1),
				z[i][j] = z[i - 1][j],
				lst[i][j] = lst[i - 1][j];
			y ^= l;
			if(y) {
				int t = 31 - __builtin_clz(y);
				lst[i][t] = y, z[i][t]++;
			}
		}
		scanf("%d", &m);
		for(int i = 1, l, r; i <= m; ++i) {
			scanf("%d%d", &l, &r), l--;
			int ans = 0;
			for(int j = 0; j < 30; ++j) ans |= (c[r][j] > c[l][j]) << j;
			for(int j = 29; ~j; --j) if(z[r][j] > z[l][j]) {
				int t = lst[r][j];
				if(z[r][j] > z[l][j] + 1) {
					ans |= all(j + 1);
					break;
				}
				/*for(int k = j; ~k; --k) if(t & (1 << k)) {
					if(ans & (1 << k)) {
						ans |= all(k + 1);
						break;
					}
					ans |= 1 << k;
				}*/
				int w = t & ~ans;
				ans |= w, t -= w;
				if(t) ans |= all(lg(t));
			}
			printf("%d ", ans);
		}
		puts("");
	}
}

Solution2

设两部分分别为 \(f,g=y\),考虑如何合并
(1) \(f\) 直接或合并
(2) \(g\) 在合并时,可以先做或,如果有重叠的位,将其中一个的这一位舍掉可以把下面的所有位都赋 1。

#include <cstdio>

const int N = 2e5 + 10;

char buf[200000], *p1, *p2;
#define getchar() (((p1==p2)&&(p2=(p1=buf)+fread(buf,1,200000,stdin))),*p1++)
int rd() {
	int x = 0; char c;
	while(c = getchar(), c < 48);
	do x = x * 10 + (c - 48);
	while(c = getchar(), c > 47);
	return x;
}

int n, k;
int all(int n) { return (1 << n) - 1; }
int lg(int x) { return 31 - __builtin_clz(x); }
int uor(int x, int y) {
	int z = x | y;
	if(x & y) z |= all(lg(x & y));
	return z;
}
int f[N << 2], g[N << 2];
int sf, sg;

int main() {
	for(int T = rd(); T--; ){
		for(n = rd(), k = 1; k <= n + 1; k <<= 1);
		for(int i = 0; i < k; ++i) f[k + i] = g[k + i] = 0;
		for(int i = 1; i <= n; ++i) {
			int x = rd(), y = rd();
			int t = x & ~all(lg(x ^ y) + 1);
			f[k + i] = t, g[k + i] = y ^ t;
		}
		for(int i = k - 1; i; --i) {
			f[i] = f[i << 1] | f[i << 1 | 1];
			g[i] = uor(g[i << 1], g[i << 1 | 1]);
		}
		for(int m = rd(); m--; ) {
			sf = sg = 0;
			for(int l = rd() + k - 1, r = rd() + k + 1; l ^ r ^ 1; l >>= 1, r >>= 1) {
				if(~l & 1) {
					sf |= f[l ^ 1];
					sg |= uor(sg, g[l ^ 1]);
				}
				if(r & 1) {
					sf |= f[r ^ 1];
					sg |= uor(sg, g[r ^ 1]);
				}
			}
			printf("%d ", uor(sf, sg));
		}
		puts("");
	}
}

标签:uor,p1,int,lst,贡献,Courses,MAC,CF1935E,sg
From: https://www.cnblogs.com/chasedeath/p/18056763

相关文章

  • Mac电脑彻底删除 JetBrains 、Idea、pycharm 、webstrom、goland
    首先删除app删除缓存新版本cdUsers/xxx/Library/rm-rfLogs/JetBrains/IntelliJIdea202x.xrm-rfPreferences/com.jetbrains.intellij.plistrm-rfPreferences/com.jetbrains.jbr.java.plistrm-rfPreferences/jetbrains.jetprofile.asset.plistrm-rfApplicat......
  • Mac终端安装Jupyter Notebook,配置环境变量及其相关知识(环境变量相关操作、编辑器、zsh
    目录1.Mac终端安装JupyterNotebook1.1先更新一下pip,然后安装JupyterNotebook1.2配置环境变量1.2.1找到Jupyter的安装位置1.2.2环境变量加到.zshrc2.相关知识2.1环境变量2.2编辑文件2.3zsh和bash2.4.zshrc(.bashrc)文件和.zprofile(.bash_profile)文件的区别1.Mac终......
  • Mac pro M3 笔记本 三指触控翻译失效
    1.问题:MacproM3笔记本三指触控翻译失效。期望功能效果如下:   2.设置    ......
  • macOS14使用brew下载Redis时出现的问题和解决方法
    当我使用brew下载redis时系统:macOS14(base)hanxuxian@hanxuxiandeMacBook-Air~%brewinstallredis报错信息:Error:git:unknownorunsupportedmacOSversion::dunnoError:'git'mustbeinstalledandinyourPATH!Warning:YouareusingmacOS14.Wedon......
  • OmniPlan Pro mac版:简单、智能,项目管理新选择!
    OmniPlanPro是一款功能强大的项目管理软件,它以其直观的用户界面和丰富的功能,帮助用户轻松管理各种复杂的项目。无论是个人任务还是团队协作,OmniPlanPro都能提供全面的解决方案,让项目管理变得更加简单高效。→→↓↓载OmniPlanPro首先,OmniPlanPro拥有强大的任务管理功能。用......
  • 奥特曼净资产破20亿美元;苹果计划通过线上渠道发布 2024 款 iPad 和 Mac丨 RTE 开发者
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 清空Mac启动桌面的图标
    如果有文件夹需要留一个图标A,把其他图标删除后,会剩余空文件夹。把留下来的图标A拖进文件夹再拖出来,空文件夹就自动删除了。最后再把图标全部删除。 #getconfDARWIN_USER_DIRcd`getconfDARWIN_USER_DIR`com.apple.dock.launchpad/dbif[-z"$1"];thenecho"\033[1......
  • 在 macOS 上编译 LaTeX 文件
    安装MacTeX:brewinstall--caskmactex之后,在终端中进入你要编译的.tex文件所在的目录,执行如下命令:pdflatexyourfile.tex将yourfile.tex换成你要编译的文件的名字。即可编译出你需要的PDF文件。如果你想要在编写.tex文件的同时预览PDF文件:打开VisualStud......
  • JavaWeb_mac_env
    maven安装brew安装wgetbrewinstallwgetbrewcleanup--prune=all //删除所有安装缓存下载mavenwgethttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz或者curl-Ohttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache......
  • The 2023 ICPC Asia Macau Regional Contest (The 2nd Universal Cup. Stage 15: Maca
    Preface最幽默的一集这场开局感觉三个人都有点发昏了,前3h30min就出了两个题,有种要打铁了的感觉后面想着干脆保个银牌稳扎稳打吧,没想到后面1h连着出了四个题成功冲到银首最后徐神好像也会G这个博弈了,如果前面不犯病的话感觉还真有机会出7题的说A.(-1,1)-Sumplete徐神基本被......