首页 > 其他分享 >Ynoi2012 NOIP2016 人生巅峰

Ynoi2012 NOIP2016 人生巅峰

时间:2023-10-07 16:58:08浏览次数:36  
标签:NOIP2016 typedef le int Ynoi2012 upd 巅峰 define

Day \(\text{XXX}\)。

注意到修改是易于复合的立方操作,而且值域非常小,所以可以直接 \(O(v\log m)\) 预处理出对每个 \(i\in[0,v)\) 操作了 \(2^{j}\le m\) 次的结果,维护出每一位被修改了多少次,查询某一位的值直接倍增 \(O(\log m)\) 即可。

然后这个限制很弱,因为如果区间内有重复的数的话直接分别选了这两个数,所以当 \(r-l+1\ge v\) 时就一定满足了。

考虑进一步弱化限制,你发现这东西再看一眼就会爆炸。因为区间 \([l,r]\) 的子集数为 \(2^{r-l+1}\),而子集的贡献和的范围只有 \(v(r-l+1)\),则 \(2^{r-l+1}>v(r-l+1)\) 时必定满足,所以 \(r-l+1\ge 14\) 时必定满足(事实上很难构造出长度 \(\le 13\) 且子集贡献和的个数卡满 \(2^{r-l+1}\) 的数据,所以乱搞都能过)。

接下来考虑 \(r-l+1\le 13\) 的情况,令 \(f_{i,j}\) 表示前 \(i\) 个数是否能凑出大小为 \(j\) 的集合。发现对于一个位置 \(i\in [l,r]\) 若 \(f_{i-1,j}=f_{i-1,j-a_i-1}=1\) 则有解,因为可以直接将 \(i\) 塞进后者集合,并且不用担心有交集的情况(如果有交集,两边同时减去交集即可)。

然后 bitset 开冲就完事了。

// Problem: P5527 [Ynoi2012] NOIP2016 人生巅峰
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5527
// Memory Limit: 125 MB
// Time Limit: 500000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define mt make_tuple
#define mp make_pair
#define fi first
#define se second

using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef tuple<int, int, int> tu;
bool Mbe;

const int N = 1e5 + 100;
const int M = 1e3 + 100;

int n, m, P;
int a[N], tr[N], f[M][18];
bitset<M * 13> b;

#define lb(x) (x & (-x))
void upd(int x, int y) { for (int i = x; i <= n; i += lb(i)) tr[i] += y; }
int qry(int x) { int res = 0; for (int i = x; i; i -= lb(i)) res += tr[i]; return res; }

void solve() {
	cin >> n >> m >> P;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 0; i < P; i++) f[i][0] = i * i * i % P;
	for (int j = 1; (1 << j) <= m; j++)
		for (int i = 0; i < P; i++)
			f[i][j] = f[f[i][j - 1]][j - 1];
	for (int _ = 1, op, l, r; _ <= m; _++) {
		cin >> op >> l >> r;
		if (op == 2) upd(l, 1), upd(r + 1, -1);
		else {
			if (r - l + 1 > 13) {
				cout << "Yuno\n";
				continue;
			}
			int fl = 0; b.reset(), b[0] = 1;
			for (int i = l; i <= r; i++) {
				int x = a[i], y = qry(i);
				for (int j = 0; (1 << j) <= m; j++)
					if ((y >> j) & 1) x = f[x][j];
				if ((b & (b << (x + 1))).any()) {
					fl = 1;
					break;
				}
				b |= (b << (x + 1));
			}
			if (fl) cout << "Yuno\n";
			else cout << "Yuki\n";
		}
	}
}

bool Med;
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cerr << (&Mbe - &Med) / 1048576.0 << " MB\n";
	#ifdef FILE
		freopen("1.in", "r", stdin);
		freopen("1.out", "w", stdout);
	#endif
	int T = 1;
	// cin >> T;
	while (T--) solve();
	cerr << (int)(1e3 * clock() / CLOCKS_PER_SEC) << " ms\n";
	return 0;
}

标签:NOIP2016,typedef,le,int,Ynoi2012,upd,巅峰,define
From: https://www.cnblogs.com/Ender32k/p/17746702.html

相关文章

  • 加训日记 Day4——挑战edu155,铭记巅峰的一集
    Day4,9.24edu155  ·打满六场新手保护赛之后的第一场(早知道暑假就不打那几场浪费保护了)  ·这场不出意外就是出意外了,库函数用的不熟练,奇奇怪怪的地方爆LL  ·C题赛后10分钟内看了看别人思路补出来了,进入思维误区了属于是  ·打完这场掉了25分捏,我觉得罚时得背大锅,越w......
  • NOIP2016提高组初赛易错题解析
    9. 正解:每一个bit,都有两种可能,0和1,所以最多可以使用232=4GB的内存 14. 正解:使用代入法,T(n)=2T(n/4)+sqrt(n),T(n/16)=2T(n/4/4/4)+1/4*sqrt(n),T(n)=2k+k*sqrt(n)=sqrt(n)+k*sqrt(n),则时间复杂度为O(sqrt(n)logn) 二.1. 正解:前三个都是无线通信技术,以太网是有......
  • 首秀就冲上PCIe 4.0 SSD巅峰!Solidigm P44 Pro 1TB评测:缓外也有1.4GB
    一、前言:英特尔+SK海力士强强联合Solidigm推出旗舰产品P44ProSolidigm作为新兴品牌,原本是英特尔的NAND闪存存储业务,由SK海力士收购之后独立组建运营的子公司。英特尔的SSD可以说是大名鼎鼎,无论是消费级,还是企业级,在性能、稳定性、功耗上都非常出色,在市面上皆有口碑。现在,现在......
  • 技术的巅峰演进:深入解析算力网络的多层次技术设计
    在数字化时代的浪潮中,网络技术正以前所未有的速度演进,而算力网络作为其中的一颗明星,以其多层次的技术设计引领着未来的网络构架。本文将带您深入探索算力网络独特的技术之旅,从底层协议到分布式控制,为您呈现这一创新网络的魅力。**演进之源:多层次技术设计**算力网络的创新之处在于其......
  • 巅峰极客 2023 g0re
    解题过程打开软件是加壳的,使用010打开,可以看到是魔改的upx,将关键词改成UPX,然后脱壳成功,使用IDA打开,可以看到是没有符号的,分析起来比较难顶,使用go_parser还原符号后打开main_main,先运行一下查看有没有什么提示有个wrong,字符串搜索定位过去,然后查看交叉引用,可以看到在main......
  • [Ynoi2012] NOIP2015 充满了希望(扫描线+线段树)
    题目传送门solution简单题。我们正着做扫描线。设\(t_i\)表示位置\(i\)最后一次进行二操作的时间,那么一操作就是交换\(t_x,t_y\),二操作就是区间复制。对于三操作,开一个树状数组,如果查询的位置的\(t_x=j\),就在\(j\)的位置上加一。查询就是查询后缀和。#include<bit......
  • 巅峰极客
    巅峰极客就复现两道题,另一个没学过,就先不学习了.linkmap没有报名这个比赛,但是看了第一题,感觉挺有意思的,刚开始没有什么好的思路,后来听了zikh师傅的思路(发现自己还是做的题型有点少)具体做法1、就是利用movrax,qwordptr[rbp-8];movqwordptr[rdx],rax;nop......
  • 巅峰极客复现
    题找不到了,只能学学原理了hellosql这道过滤了sleep等所有的延时函数,大佬的方式是用计算笛卡尔积的方式达到延时的效果 这种方式能够达到延时的效果,但是比较不稳定,如果表中数据太少可能会达不到延时的效果,如果数据太多有可能会让网站崩溃大佬wp中的代码:importrequests#......
  • 复现:巅峰极客2023
    weclomefoundme一个dmp文件,用010打开查找hint,提示Netflixpictureformat,搜索可知Netflix的图片类型为AVIFavif文件头为0000001C6674797061766966,直接在010找出来分离(也可以用foremost分离,avif文件被归入mp4中)一起学生物hint:考虑关接氨基酸所在的位置两张pn......
  • 巅峰极客 2023 逆向 Writeup
    巅峰极客WriteUpm1_read白盒AES,其他师傅也写的比较清楚了。我当时用的FridavarbaseAddr=Module.findBaseAddress("m1_read.exe");varwhiteAES=newNativeFunction(baseAddr.add(0x4BF0),'pointer',['pointer','pointer'])varcount=9;In......