luoguP5445 [APIO2019]路灯 树套树+set

2021-03-20 02:24

阅读:562

标签:insert   断点   scan   amp   max   return   div   ace   algorithm   

code: 

#include  
#include   
#include 
#include  
#include 
#include   
#define N 300005 
#define MAX 320005  
#define setIO(s) freopen(s".in","r",stdin) ,freopen(s".out","w",stdout)     
using namespace std;    
int n;          
int rt[MAX];            
namespace tr { 
    #define lson s[x].ls 
    #define rson s[x].rs        
    int tot;  
    int newnode() { return ++tot; }    
    int lowbit(int x) { return x&(-x); }   
    struct node {
        int ls,rs,sum;    
    }s[MAX*100];      
    void update(int &x,int l,int r,int p,int v) 
    {   
        if(!x) x=newnode();   
        s[x].sum+=v;    
        if(l==r) return; 
        int mid=(l+r)>>1; 
        if(p=L&&r>1,re=0;    
        if(Lmid)  re+=query(rson,mid+1,r,L,R);      
        return re;   
    }    
    void upd(int x,int y,int v) 
    {
        for(int i=x;ii+1   
setS;   
set::iterator it;   
int Q,T,swi[N];     
void con(int x,int y) 
{        
    it=S.lower_bound(x);     
    int l,r,L,R;  
    if(it==S.begin()) l=1,r=x;     
    else --it,l=(*it)+1,r=x;        
    it=S.lower_bound(x);    
    it++;  
    if(it==S.end()) L=x+1,R=n+1;    
    else L=x+1,R=(*it);        
    S.erase(x);               
    tr::upd(l,L,Q-T);         
    tr::upd(l,R+1,T-Q);   
    tr::upd(r+1,L,T-Q);     
    tr::upd(r+1,R+1,Q-T);    
}  
void clo(int x,int y) 
{      
    // printf("%d %d\n",x,y);  
    S.insert(x);   
    it=S.lower_bound(x);   
    int l,r,L,R;                 
    if(it==S.begin()) l=1,r=x;   
    else --it,l=(*it)+1,r=x;   
    it=S.lower_bound(x);     
    it++;   
    if(it==S.end()) L=x+1,R=n+1;   
    else L=x+1,R=(*it);          
    tr::upd(l,L,T-Q);    
    tr::upd(l,R+1,Q-T);   
    tr::upd(r+1,L,Q-T);           
    tr::upd(r+1,R+1,T-Q);     
}
int ask(int x,int y) 
{           
    int re=tr::que(x,y);    
    set::iterator X,Y;        
    X=S.lower_bound(x); 
    Y=S.lower_bound(y);    
    if(X==Y) re-=Q-T;
    return re;    
}   
int main() {
    // setIO("input");    
    int i,j;         
    scanf("%d%d%s",&n,&Q,str+1);              
    // t=0   
    for(i=1;i

  

luoguP5445 [APIO2019]路灯 树套树+set

标签:insert   断点   scan   amp   max   return   div   ace   algorithm   

原文地址:https://www.cnblogs.com/guangheli/p/12312735.html


评论


亲,登录后才可以留言!