浅谈整体二分

思路有些像CDQ,都是离线

整体二分满足以下性质: 
1. 询问的答案具有可二分性 
2. 修改对判定答案的贡献相对独立,修改之间互不影响效果 
3. 修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值 
4. 贡献满足交换律,结合律,具有可加性 
5. 题目允许离线操作

时间复杂度方面还要满足整体二分内部不能与序列的总长度相关,而要与当前的序列的长度相关

————————————————————————————————————————————————————————

例1:静态区间第K小

二分了答案,标记0/1后,(0表示小于等于mid,1表示大于mid),前缀和一下,然后再判断分解,继续递归

 

但是前缀和不能与序列总长度有关

然而可以发现一个性质:原来比之前[l,r]中的mid大的,肯定比[l,mid]中的mid大,所以只用在原来的基础上修改没一个数就好了

所以果断上个树状数组

#include<cstdio>
#include<algorithm>
using namespace std;

const int N=1e6+5;
int n,m,ql[N],qr[N],qk[N],id[N],p,n1,n2,c[N],ans[N],t1[N],t2[N];
struct A{int id,x; }a[N];
bool cmp(A i,A j){ return i.x<j.x; }

inline void add(int x,int val)
{
	for(int i=x;i<=n;i+=i&-i) c[i]+=val;
}

inline int sum(int x)
{
	int ret=0; 
	for(int i=x;i;i-=i&-i) ret+=c[i];
	return ret;
}

void work(int l,int r,int ll,int rr)
{
	if(l>r) return;
	int mid=ll+rr>>1;
	while(p+1<=n&&a[p+1].x<=mid) p++,add(a[p].id,1);
	while(p&&a[p].x>mid) add(a[p].id,-1),p--;
	n1=n2=l;
	for(int i=l;i<=r;i++)
		if(sum(qr[id[i]])-sum(ql[id[i]]-1)>=qk[id[i]]) 
			ans[id[i]]=mid,t1[n1++]=id[i];
		else t2[n2++]=id[i];
	for(int i=l;i<n1;i++) id[i]=t1[i];
	for(int i=n1;i<=r;i++) id[i]=t2[i-n1+l];
	if(ll==rr) return;
	work(l,n1-1,ll,mid),work(n1,r,mid+1,rr);
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) 
		scanf("%d",&a[i].x),a[i].id=i;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=m;i++) 
		scanf("%d%d%d",&ql[i],&qr[i],&qk[i]),id[i]=i;
	work(1,n,a[1].x,a[n].x);
	for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
	return 0;
 } 

例2:动态区间第K小

还没想清楚,留个坑

 

### 多场景下某平台反爬虫策略探讨 #### 场景一:电商平台的商品信息保护 为了防止竞争对手通过自动化工具大量获取商品的价格、库存等敏感商业信息,电商网站通常会采用多种反爬虫机制。例如,京东和淘宝可能会利用复杂的验证码验证用户身份,限制同一IP地址的请求频率,并监控异常行为模式[^3]。 对于此类情况下的反爬虫措施还包括但不限于: - **动态网页加载**:部分商品详情页的数据并非一次全部返回给浏览器,而是分批次异步加载显示出来; - **加密参数传递**:URL中的查询字符串可能经过特殊编码处理,使得普通的HTTP GET请求难以直接获得所需资源; ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get('https://example.com/product', headers=headers) print(response.text) ``` 上述代码展示了如何设置自定义`User-Agent`头来模仿真实用户的浏览习惯,但这并不足以完全规避高级别的防护体系[^4]。 #### 场景二:社交网络的内容分享控制 社交媒体平台往往重视用户体验以及内容版权管理,所以也会部署相应的防御方案阻止未经授权的大规模数据采集活动。这方面的具体做法有: - **API接口权限校验**:只有注册过的应用才能调用官方提供的RESTful API读写特定范围内的资料; - **图形化界面交互逻辑判断**:当检测到连续快速点击按钮或滚动页面时触发警告提示框并记录日志; ```javascript // JavaScript模拟人类自然滑动屏幕事件 function simulateHumanScroll() { const scrollStep = Math.floor(Math.random() * 100); window.scrollBy(0, scrollStep); // 随机数值让动作更像真人所为 } setInterval(simulateHumanScroll, 2000 + Math.round(Math.random()*800)); ``` 此段JavaScript脚本尝试重现真实的用户操作方式以降低被识别的风险水平。 #### 场景三:金融类服务平台的安全保障 鉴于金融机构对安全的极高要求,其在线门户往往会集成更为严格的身份认证过程和技术手段抵御潜在风险。典型特征如下所示: - **多因素鉴权机制**:除了传统的账号密码组合外还需提供额外的一次口令(OTP)、生物特征样本等辅助证明材料; - **流量分析引擎**:基于机器学习算法构建实时监测系统评估每一次连接是否存在可疑之处; 综上所述,在不同应用场景里实施有针对的设计思路能够有效提升系统的整体安全,同时也提醒广大开发者应当遵循道德准则合法合规地开展工作[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值