本人的ODT板子如下,但是这个板子经常卡住,求调。
#include<bits/stdc++.h>
#define iter set<maintain>::iterator
#define ll long long
using namespace std;
struct ODT
{
struct maintain
{
int l,r;
mutable int val;
bool operator<(const maintain &e2)const
{
return l<e2.l;
}
};
set<maintain> s;
iter split(int pos)
{
iter it=s.lower_bound({pos,0,0});
if(it!=s.end()&&it->l==pos)
return it;
it--;
int L=it->l,R=it->r,V=it->val;
s.erase(it);
s.insert({L,pos-1,V});
return s.insert({pos,R,V}).first;
}
void assign(int l,int r,int val)
{
iter R=split(r+1),L=split(l);
s.erase(L,R);
s.insert({l,r,val});
return;
}
}odt;
int main()
{
return 0;
}