社区讨论
关于 P4093 的 BIT 套 map 写法
学术版参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mll1gl81
- 此快照首次捕获于
- 2026/02/13 23:24 6 天前
- 此快照最后确认于
- 2026/02/17 09:50 前天
我的代码是长这样的:
Code
CPP#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&-(x))
constexpr int N=1e5+9;
int n,m,ans;
struct node{
int x,y_1,y_2;
}a[N];
map<int,int> tr[N];
void insert(int x,int y,int k){
for(;x<N;x+=lowbit(x)){
auto it=tr[x].upper_bound(y);
if(it!=tr[x].begin()&&prev(it)->second>=k) continue;
while(it!=tr[x].end()&&it->second<=k) it=tr[x].erase(it);
tr[x][y]=k;
}
}
int range_max(int x,int y){
int res=0;
for(;x;x-=lowbit(x)){
auto it=tr[x].upper_bound(y);
if(it==tr[x].begin()) continue;
res=max(res,prev(it)->second);
}
return res;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].x;
a[i].y_1=a[i].y_2=a[i].x;
}
for(int i=1,x,y;i<=m;i++){
cin>>x>>y;
a[x].y_1=min(a[x].y_1,y);
a[x].y_2=max(a[x].y_2,y);
}
for(int i=1;i<=n;i++){
int res=range_max(a[i].y_1,a[i].x)+1;
ans=max(ans,res);
insert(a[i].x,a[i].y_2,res);
}
cout<<ans;
return 0;
}
我希望它在数据随机的情况的期望复杂度应该是 ,但是我没有证据(并且它跑得也不是很快)。
不知道有没有人能证明一下()
回复
共 2 条回复,欢迎继续交流。
正在加载回复...