P8539 「Wdoi-2」来自地上的支援

题目背景

波光粼粼的山顶湖与庄严神圣的神社之下,是一座复合型活火山。
沿幻想风穴而下,便能到达火山之下,废弃已久的地狱原址。

在旧地狱中,有一座大都市。那里是旧地狱还是地狱的时候在那工作的众鬼们居住的地方,只有那里亡者们是无法踏入去的。后来地狱体制改革,机构搬离了这个地方。
因为这个缘故这块地狱变成了废墟,但却有一部分看上了那里的妖怪擅作主张占领了那里,于是就成了如今的旧地狱了。
这里比地上更没有秩序可言。悍匪恶霸,特别是惹人类讨厌的家伙都喜欢搬到这边定居下来。

自旧地狱喷泻而出的间歇泉,给妖怪之山带来了优良的温泉,也喷出了大量的怨灵。

为了解决这次异变,乐园的巫女和普通的魔法使结伴而行,在来自地上的支援下,自幻想风穴直冲地底。

先后结(bao)识(da)了黑暗洞窟中的明亮之网、地壳下的嫉妒心、人们所谈论的怪力乱神后,二人来到了遗址中心的洋馆,地灵殿。

受这里主人的指引,二人来到了位于深处的间歇泉地下中心。

题目描述

简要题意

给定正整数 nnnvvv 和长度为 nnn 的数组 {Ai}\{A_i\}{Ai}

有一个长度为 nnn 的数组 BBB,初始值与 AAA 相同。
执行 nnn 次操作,第 iii 次操作在 [1,i][1,i][1,i] 中按如下规则选取一个正整数 jjj,然后把 BjB_jBj 变成 Bj+vB_j+vBj+v

  • 选取 BjB_jBj 最大的 jjj
  • BjB_jBj 相同时选择 AjA_jAj 最大的 jjj
  • Aj,BjA_j,B_jAj,Bj 均相同,选择较小的 jjj

我们称这是选中了一次 jjj

mmm 次询问,每次询问给定 xi,kix_i,k_ixi,ki。表示求最小的 sss,使得AxiA_{x_i}Axi 的初始值改为 sss(注意此时 BxiB_{x_i}Bxi 的初始值也会跟着改变),xix_ixi 至少被选中 kik_iki 次,或报告不存在(结果为 000)。请注意,sss 不存在最小值时也是报告不存在(结果为 000)。

询问之间互相独立,也就是每次询问不会对 AxiA_{x_i}AxiBxiB_{x_i}Bxi 产生实质性更改。

原始题意

到达控制中心之后,主角组和灵乌路空进行了激烈的狗斗大赛。负责技术维护的河童需要接受荷取来自地上指挥部的指令,保障生产安全。

具体地,有 nnn 个核反应机组依次排开,第 iii 个机组的活动强度为 AiA_iAi。为了维护平衡,控制系统依次操作 nnn 次,第 iii 次操作会在前 iii 个机组中找到一个当前活动度最高的机组,进行一次调节平衡操作,并将其活动度增加 vvv。倘若有多个机组活动度最高,就应当选择初始活动度最大的,若还是无法比较,则取编号最小。

为了在自动控制系统的基础上调节平衡,荷取会发出 mmm 条指令,形如她每次会给出两个整数 xi,kix_i,k_ixi,ki,表示她会修改第 xix_ixi 个机组的初始活动度。她希望通过修改(必须改成一个非负整数 sss)后,xix_ixi 号机组至少被平衡 kik_iki 次。如果无论如何都无法达到要求,那么结果就是 000;否则请求出满足条件的最小的 sss

输入格式

  • 第一行有三个整数 n,m,vn, m, vn,m,v
  • 接下来一行,有 nnn 个整数,描述 aia_iai
  • 接下来 mmm 行,每行有两个整数 xi,kix_i,k_ixi,ki,描述一次询问。

输出格式

  • 一行,输出两个整数,表示所有结果的异或和加法和

输入输出样例 #1

输入 #1

7 2 3
1 4 1 5 4 1 1
3 3
6 4

输出 #1

7 7

输入输出样例 #2

输入 #2

10 10 9
14 91 84 13 97 92 23 64 31 10 
5 2
5 5
9 1
2 6
9 1
5 4
3 5
2 8
8 2
5 4

输出 #2

245 1177

说明/提示

样例 1 解释

对于第一次询问,我们将 A3A_3A3 修改为 777

  • 第一次操作选择了位置 111,于是 B1B_1B1 变为 444
  • 第二次操作选择了位置 222,于是 B2B_2B2 变为 777。虽然操作前 B1=B2B_1=B_2B1=B2,但是 A2>A1A_2>A_1A2>A1,因此选择位置 222
  • 第三次操作选择了位置 333,于是 B3B_3B3 变为 101010
  • 第四次操作选择了位置 333,于是 B3B_3B3 变为 131313
  • 第五次操作选择了位置 333,于是 B3B_3B3 变为 161616
  • 第六次操作选择了位置 333,于是 B3B_3B3 变为 191919
  • 第七次操作选择了位置 333,于是 B3B_3B3 变为 222222

于是位置 333 一共被选择了 555 次,满足题意。可以证明,如果把 A3A_3A3 的初始值设为 666,无法达成要求。于是该询问结果为 777

对于第二个询问,容易发现不可能有 444 次以上操作选择位置 666。因此该询问结果为 000

7⊕0=77\oplus 0=770=77+0=77+0=77+0=7,因此输出 7,77,77,7

数据范围

Subtaskn,m≤ai≤v≤分值110100101021005×103502031031091001041051091002552×10610910035 \def\arraystretch{1.5} \begin{array}{|c|c|c|c|c|}\hline \textbf{Subtask} & \bm{n,m\le} & \bm {a_i\le } & \bm{v\le} & \textbf{分值} \cr\hline 1 & 10 & 100 & 10 & 10 \cr\hline 2 & 100 & 5\times 10^3 & 50 & 20 \cr\hline 3 & 10^3 & 10^9 & 100 & 10 \cr\hline 4 & 10^5 & 10^9 & 100 & 25 \cr\hline 5 & 2\times 10^6 & 10^9 & 100 & 35 \cr\hline \end{array}Subtask12345n,m101001031052×106ai1005×103109109109v1050100100100分值1020102535

对于全部数据,满足 1≤n,m≤2×1061 \le n,m \le 2\times 10^61n,m2×1061≤v≤1001 \le v \le 1001v1001≤ai≤1091 \le a_i \le 10 ^ 91ai1091≤x,k≤n1 \le x,k \le n1x,kn

本题 IO 量较大,请选择合适的输入方式。

C++实现

#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l;i<=r;i++)
#define dn(l,r,i) for(int i=l;i>=r;i--)
using namespace std;
typedef long long i64;
const int INF =2147483647;
const int MAXN =1e7+3;
int n,m,v,w,l,F[MAXN],G[MAXN],A[MAXN],X[MAXN],K[MAXN];
i64 ans1,ans2; char _file[256];
int qread(){
	int w=1,c,ret;
	while((c=getchar())> '9'||c< '0')
		w=(c=='-'?-1:1); ret=c-'0';
	while((c=getchar())>='0'&&c<='9') 
		ret=ret*10+c-'0';
	return ret*w;
}
int main(int argc,char **argv){
	n=qread(),m=qread(),v=qread();
	up(1,n,i) A[i]=qread();
	up(1,m,i) X[i]=qread(),K[i]=qread();	
    A[0]=-INF;
	up(1,n,i){
		A[i]=w=A[i]-i*v;
		if(w>=A[F[i-1]]) G[i]=F[i-1],F[i]=i; else
		if(w>=A[G[i-1]]) G[i]=i,F[i]=F[i-1]; else
		G[i]=G[i-1],F[i]=F[i-1];
	}
	up(1,m,i){
		int x=X[i],k=K[i],y=x+k-1; l=0;
		if(y<n) 
			l=max(0,x*v+(F[y]==x?A[G[y]]+(G[y]>x):A[F[y]]+(F[y]>x)));
        ans1^=l,ans2+=l;
	}
    printf("%lld %lld\n",ans1,ans2);
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

更多推荐