Mayor 's posters, 선분 수, 이산 화
선분 나 무 를 쓰 지 않 는 방법 도 있다. 예 를 들 어 무 더 기 를 사용 하고 이 점 을 참고 하 자.
#include
#include
#include
#include
using namespace std;
#define N 60100
#define ls (p<<1)
#define rs (p<<1|1)
#define mid(p) (t[p].l+t[p].r>>1)
struct segmentTree{
int l,r,v;
int tag;
}t[N*4];
void lazy(int p){
if (t[p].tag){
t[ls].v=t[rs].v=t[ls].tag=t[rs].tag=t[p].tag;
t[p].tag=0;
}
}
void build(int l,int r,int p){
t[p].l=l;t[p].r=r;t[p].tag=t[p].v=0;
if (t[p].l==t[p].r) return;
int m=mid(p);
build(l,m,ls);
build(m+1,r,rs);
}
void update(int l,int r,int p,int v){
if (l==t[p].l&&r==t[p].r){
t[p].tag=t[p].v=v;
return;
}
lazy(p);
int m=mid(p);
if (r<=m) {
update(l,r,ls,v);
}
else if (l>m){
update(l,r,rs,v);
}
else {
update(l,m,ls,v);
update(m+1,r,rs,v);
}
}
int query(int pos,int p){
if (t[p].l==t[p].r) return t[p].v;
lazy(p);
int m=mid(p);
if (pos<=m){
return query(pos,ls);
}
else {
return query(pos,rs);
}
}
int vis[N],b[N];
int n;
struct poster{
int be,ed;
}s[N];
int discret(){
int tn=0;
int i;
for(i=1;i<=n;++i){
b[++tn]=s[i].be;
b[++tn]=s[i].be+1;
b[++tn]=s[i].be-1;
b[++tn]=s[i].ed;
b[++tn]=s[i].ed+1;
b[++tn]=s[i].ed-1;
}
sort(b+1,b+tn+1);
int ret=unique(b+1,b+tn+1)-b;
return ret;
}
int bsch(int l,int r,int v){
int m;
while(l<=r){
m=l+r>>1;
if (b[m]==v) return m;
else if (b[m]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.