zoukankan      html  css  js  c++  java
  • CF915E Physical Education Lessons 珂朵莉树

    问题描述

    CF915E

    LG-CF915E


    题解

    (n le 10^9) 看上去非常唬人。

    但是这种区间操作的题,珂朵莉树随便跑啊。


    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    template <typename Tp>
    void read(Tp &x){
    	x=0;char ch=1;int fh;
    	while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    	if(ch=='-'){fh=-1;ch=getchar();	}
    	else fh=1;
    	while(ch>='0'&&ch<='9')	x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
    	x*=fh;
    }
    
    struct node{
    	int l,r;
    	mutable int v;
    	node(int L,int R=-1,int V=0):l(L),r(R),v(V){}
    	bool operator <(node a)const{
    		return l<a.l;
    	}
    };
    
    #define IT set<node>::iterator
    
    int n,T;
    int l,r,k;
    
    set<node>s;
    
    IT split(int pos){
    	IT it=s.lower_bound(node(pos));
    	if(it!=s.end()&&it->l==pos) return it;
    	--it;
    	int L=it->l,R=it->r,V=it->v;
    	s.erase(it);s.insert(node(L,pos-1,V));
    	return s.insert(node(pos,R,V)).first;
    }
    
    int ans;
    
    void assign(int l,int r,int val){
    	IT rr=split(r+1),ll=split(l);IT it=ll;
    	for(;ll!=rr;ll++) ans-=ll->v*(ll->r-ll->l+1);
    	s.erase(it,rr);s.insert(node(l,r,val));ans+=val*(r-l+1);
    }
    
    int main(){
    	read(n);read(T);
    	s.insert(node(1,n,1));ans=n;
    	while(T--){
    		read(l);read(r);read(k);--k;
    		assign(l,r,k);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    函数调用时函数栈状态分析
    [Project Euler] Problem 51
    [Project Euler] Problem 52
    [Project Euler] Problem 49
    自己的路
    COBOL FILE STATUS(return code)
    SVN客户端使用手册
    堆栈在VBA中的实现
    一个月以来的实习总结
    OpenCVPython系列之图像腐蚀与膨胀
  • 原文地址:https://www.cnblogs.com/liubainian/p/11789421.html
Copyright © 2011-2022 走看看