乱搞

对于一个数字序列。a1~n判断是否任意一个连续子序列都存在一个数字只出现了一次  ai<=10^9, n<=20^5

非常扯犊子的题目.

这题看了思路其实很简单。。。但是为什么要双向同时查找呢。据说这就相当于。启发式合并的逆过程所以就nlogn了。。我不会告诉你其实每次随机一边开始扫也是一样的复杂度。。。

#include <cstdio>  
#include <cmath>  
#include <ctime>  
#include <string>  
#include <cstring>  
#include <cstdlib>  
#include <iostream>  
#include <algorithm>  
  
#include <vector>  
#include<map>

#define forup(i,a,b) for(int i=(a);i<=(b);i++)  
#define fordown(i,a,b) for(int i=(a);i>=(b);i--)  
  
#define maxn 2000005 

using namespace std;  
 
  
template<class T> inline  
void read(T& num){   num = 0; bool f = true;char ch = getchar();   while(ch < '0' || ch > '9') { if(ch == '-') f = false;ch = getchar();}  while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();}   num = f ? num: -num; } 


int T,n;
int a[maxn];
int nxt[maxn],pre[maxn];
map<int,int> num;
bool  solve(int L,int R)
{ if(L>=R)  return true; 
 int l=L,r=R;
   while(((nxt[l]<=R&&nxt[l]!=0)||(pre[l]>=L&&pre[l]!=0))&&((nxt[r]<=R&&nxt[r]!=0)||(pre[r]>=L&&pre[r]!=0)))
     {l++;r--;
      if(l>r) return false; 
	 }
	 if((nxt[l]>R||nxt[l]==0)&&(pre[l]<L||pre[l]==0)) return solve(L,l-1)&&solve(l+1,R);
	 else  return solve(L,r-1)&&solve(r+1,R);
}

int main()
{cin>>T;
 while(T--)
  {read(n);//forup(i,0,n+1)  { pre[i]=0,nxt[i]=0;}
  num.clear();  
     forup(i,1,n) {read(a[i]);pre[i]=num[a[i]];num[a[i]]=i;  }
      num.clear();
	  fordown(i,n,1)  {nxt[i]=num[a[i]];num[a[i]]=i;}
  if(solve(1,n))  printf("yes\n");else  printf("no\n");
  }
	
	
	
	
	return 0;
 } 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你的Kali Linux系统的网络配置出现了问题,可以尝试以下步骤来修复它: 1. 检查网络配置文件:打开终端并输入 "sudo nano /etc/network/interfaces",检查配置文件是否正确。如果出现错误,请修复它并保存更改。 2. 重启网络服务:输入 "sudo service networking restart" 以重启网络服务。 3. 检查IP地址:输入 "ifconfig" 查看你的IP地址是否正确。如果不正确,请尝试手动设置一个正确的IP地址。 4. 检查网关和DNS:输入 "cat /etc/resolv.conf" 查看你的网关和DNS是否正确。如果不正确,请尝试手动设置它们。 如果以上步骤仍然无法解决你的问题,你可以考虑重新安装Kali Linux系统或者联系网络管理员寻求帮助。 ### 回答2: Kali的网段配置搞乱了可能是由于以下几个原因造成的: 1. IP地址冲突:Kali通过DHCP或手动分配得到了一个已经被其他设备使用的IP地址。这会导致网络中存在两个设备拥有相同的IP地址,从而导致网络通信问题。 2. 子网掩码错误:Kali的子网掩码设置有误,导致Kali无法正确识别网络中的其他设备并进行通信。子网掩码决定了网络中IP地址的分类和范围,如果错误设置,将影响网络通信。 3. 网关设置错误:Kali的网关设置有误,导致Kali无法正确路由数据包。网关是连接不同网络的通道,如果设置错误,可能会导致网络通信中断。 为解决Kali的网段配置问题,可以采取以下步骤: 1. 检查IP地址冲突:通过查看网络中已经分配的IP地址,确保Kali所使用的IP地址与其他设备不重复。可以使用IP扫描工具如nmap来扫描局域网中的设备及其IP地址。 2. 修正子网掩码设置:根据网络的规模和需求,正确设置Kali的子网掩码。一般情况下,家庭网络可以使用255.255.255.0作为子网掩码。 3. 确认网关设置:查看网络中的路由器或交换机设置,确认Kali的网关设置是否正确。一般情况下,网关设置为主路由器的IP地址。 4. 重启网络服务:在进行以上调整后,可能需要重启Kali的网络服务以使更改生效。可以使用命令"sudo service networking restart"来重启网络服务。 5. 更新网络配置:如果以上步骤无效,还可以尝试更新Kali系统的网络配置文件,其中包括/etc/network/interfaces和/etc/resolv.conf等文件。 总之,通过检查IP地址,子网掩码和网关设置,并进行相应调整和更新,可以解决Kali的网段配置问题,使其重新恢复正常的网络通信能力。 ### 回答3: Kali的网段配置搞乱了可能是指在Kali操作系统中网络配置出现了问题,导致无法正常连接到网络或与其他设备通信。对于这个问题,可以采取以下步骤进行排查和修复。 首先,我们需要查看Kali的网络配置。可以通过在终端中运行命令"ifconfig"来查看当前的网络接口和IP地址。确保网络接口状态正常,并且IP地址在与其他设备处于同一网段。 如果IP地址不是与其他设备处于同一网段,可以通过编辑网络接口配置文件来修复。网络接口配置文件位于"/etc/network/interfaces"。使用文本编辑器打开该文件,确保该文件中的网段配置与其他设备相匹配。 如果网络接口配置文件正确,则需要检查网络配置文件"/etc/resolv.conf",以确保正确配置了DNS服务器。如果没有正确配置DNS服务器,则可能无法通过域名进行网络访问。 另外,可以使用命令"route"来查看和管理路由表。确保路由表中没有错误的网关或路由配置。 如果上述步骤都没有解决问题,可以尝试重新启动网络服务,命令为"service networking restart"。或者重启整个操作系统,有时这可以解决一些网络配置问题。 需要注意的是,网段配置问题可能出现在路由器、交换机或其他网络设备的配置中。如果Kali的网络配置一直正常,而其他设备无法与其正常通信,可能需要检查并排除网络设备的配置问题。 总之,通过检查和修复Kali的网络接口配置、路由表和DNS服务器配置,可以解决Kali网段配置搞乱的问题,以便正常连接到网络并与其他设备通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值