首页 > 其他分享 >P10050 [CCO2022] Alternating Heights

P10050 [CCO2022] Alternating Heights

时间:2024-12-28 17:09:36浏览次数:5  
标签:Alternating int ll mid 合法 CCO2022 ind MAXN P10050

题目大意

详细题目传送门
有 \(k\) 个未知数 \(k_1,k_2,\cdots,k_n\)

然后有一个数组 \(a\)。

\(Q\) 组询问,每组给出 \(l,r\)。求是否存在一种赋值方法满足 \(k_{a_l}>k_{a_{l+1}}<k_{a_{l+2}}>\cdots k_{a_r}\)。即满足大于小于大于··· 。
\(k\leq n\leq 3000,Q\leq 10^6\)

思路

发现对于多组数据每组单独处理肯定是无法做到的。可以看看能不能先根据一些区间的连续性来推出每一个区间是否合法。

之后发现对于一个区间 \([l,r]\) 合法,那么 \([l,i],i\in [l,i]\) 全部合法。若 $[l,r] $ 不合法,则 \([l,i],i\in[r,n]\) 一定全部不合法。所有我们发现可以枚举每一个 \(l\),尝试二分求出一个最大的 \(r\) 使 \([l,r]\) 合法。

之后考虑如何判断 \([l,r]\) 是否合法。发现类似与差分约束,可是只有大于关系没有不等式关系。于是对于每一个要求的 \(h_{A_{x-1}}>h_{A_x}<h_{A_{x+1}}\),我们连两个有向边 \(A_{x-1}\rightarrow A_x\) 和 \(A_{x+1}\rightarrow A_x\)。之后得到一张有向无权图。

显然如果图出现了环就非法,没有就合法。考虑到 \(h\) 互不相同的条件发现所有的有向边的约束全部是大于关系,且没有规定 \(h\) 的值域,所以自然不存在相等情况。

时间复杂度 \(Q+n^2\log n\)。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN=3000+5;
const ll MAXQ=1e6+5;
ll n,k,Q;
ll a[MAXN];
bool gd[MAXN][MAXN];
vector<ll>adj[MAXN];
ll ind[MAXN];
void add(ll u,ll v){
	adj[u].push_back(v);
	ind[v]++;
}
bool check(ll l,ll r){
	memset(ind,0,sizeof(ind));
	for(int i=1;i<=k;++i){
		adj[i].clear();
	}
	for(int i=l+1;i<=r;i+=2){
		add(a[i-1],a[i]);
		if(i+1<=r){
			add(a[i+1],a[i]);
		}
	}
	queue<ll>q;
	ll tot=0;
	for(int i=1;i<=k;++i){
		if(!ind[i]){
			q.push(i);
		}
	}
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		tot++;
		for(auto v:adj[u]){
			ind[v]--;
			if(!ind[v]){
				q.push(v);
			}
		}
	}
	return tot==k;
}
ll ans[MAXN];
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>k>>Q;
	for(int i=1;i<=n;++i){
		cin>>a[i];
	}
	for(int i=1;i<=n;++i){
		ll l=i,r=n;
		ans[i]=i;
		while(l<=r){
			ll mid=(l+r)>>1;
			bool good=check(i,mid);
			if(good){
				l=mid+1;
				ans[i]=mid;
			}else{
				r=mid-1;
			}
		}
	};
	for(int i=1;i<=Q;++i){
		ll x,y;
		cin>>x>>y;
		if(y<=ans[x]){
			cout<<"YES\n";
		}else{
			cout<<"NO\n";
		}
	}
	return 0;
}

标签:Alternating,int,ll,mid,合法,CCO2022,ind,MAXN,P10050
From: https://www.cnblogs.com/tanghg/p/18637672/solution-p10050

相关文章

  • 交替方向乘子法(Alternating Direction Method of Multipliers,简称ADMM)
    ADMMADMM简介交替方向乘子法(AlternatingDirectionMethodofMultipliers)通常用于解决存在两个优化变量的只含等式约束的优化类问题,其一般形式为:min⁡......
  • Make it Alternating
    赛时用的DP,但是转移有一点点想不清楚设\(f[i][0/1]\)表示前\(i\)个字符,以\(0/1\)结尾的最小删除数目,\(g[i][0/1]\)表示前\(i\)个字符,在达到以\(0/1\)结尾的最小删除数目的前提下的方案数然后就会发现此时的\(g\)比较难转移,我们必须要将删除字符转换为保留字符,这样的话就可以设\(......
  • 一道好玩的组合数学的推公式题(绿名题, 1879C - Make it Alternating
    1879C-MakeitAlternating先贴代码,看能不能理解stra;llv[N];//装着01化为-1,1的数的数组llf[N];//装着预处理的组合数voidmoon(){cin>>a;n=0;m=a.size();eps(i,0,m+10)v[i]=0;//eps()是一个陋习,define定义的for循环for(autop:a){v[++n]=(p=='1'?1......
  • [ABC341E] Alternating String 题解
    题目传送门原题传送门题意给出长为\(n\)的01串,如果一个子串01交替出现,则称其为“好的”。有\(q\)次询问,把\([x,y]\)中的每一位反转或者询问\([x,y]\)是否是“好的”。分析一眼线段树。用线段树维护区间是否是“好的”,每个节点维护最左段和最右端的值,pushup和q......
  • 山海经&&Atcoder Alternating String (线段树)
    前言:为什么把他们放在一起?因为我发现把pushup向上回溯放结构体类型函数里比较方便并且这两题确实也有相同思想山海经这题分三种情况左子树前缀和+右子树前缀和2.右子树后缀和与右总区间+左子树3.左区间最大子段与右区间最大子段与左后缀与右前缀特别要注意......
  • SP10050 POWTOW - Power Tower City 题解
    题目传送门前置知识扩展欧拉定理解法本题幂塔是有限层的,这里与luoguP4139上帝与集合的正确用法中的无限层幂塔不同,故需要在到达递归边界\(n+1\)时进行特殊处理,对于处理\(\varphi(p)\)在递归过程中等于\(1\)的情况两题基本一致。回忆扩展欧拉定理中的\(b\)和\(\v......
  • CF1879C Make it Alternating
    传送门设\(f_{i,0}\)表示将\([1,i]\)位变成以\(0\)结尾的字符串的最小步数。\(f_{i,1}\)表示将\([1,i]\)位变成以\(1\)结尾的字符串的最小步数。\(f_{i,2}\)表示将\([1,i]\)位变成空字符串的最小步数。转移的时候分类讨论一下第\(i\)位的选取与否,注意要求方案数,所以要注意分讨......
  • Graph transduction via alternating minimization
    目录概符号说明GTAM交替优化求解WangJ.,JebaraT.andChangS.Graphtransductionviaalternatingminimization.ICML,2008.概一种对类别不均更鲁棒的半监督算法.符号说明\(\mathcal{X}_l=\{\mathbf{x}_1,\cdots,\mathbf{x}_l\}\),labeledinputs;\(\mathcal......
  • leetcode 693. Binary Number with Alternating Bits
    Givenapositiveinteger,checkwhetherithasalternatingbits:namely,iftwoadjacentbitswillalwayshavedifferentvalues.Example1:Input:5Output:TrueExplanation:Thebinaryrepresentationof5is:101Example2:Input:7Output:FalseExplanation......
  • 1129.shortest-path-with-alternating-colors 颜色交替的最短路径
    问题描述1129.颜色交替的最短路径解题思路首先,将本题的图结构以边表的形式表现出来,然后采取广度优先搜索的方式寻找最短路径,一般来说广度优先搜索能够保证找到的是最短......