zoukankan      html  css  js  c++  java
  • CF915E Physical Education Lessons

    洛谷题目链接

    珂朵莉树吼啊!!!

    操作唯一:区间赋值,上模板就阔以了

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<set>
    #define Set set<Node>::iterator
    #define N 1000000007
    using namespace std;
    struct Node
    {
    	int l,r;
    	mutable int val;
    	Node(int L,int R,int V):l(L),r(R),val(V){}
    	Node(int L):l(L){}
    	bool operator<(const Node &it)const
    	{
    		return l<it.l;
    	}
    };
    set<Node> st;
    int n,m,num;
    Set Split(int x)
    {
    	Set it=st.lower_bound(Node(x));
    	if(it!=st.end()&&it->l==x)
    		return it;
    	--it;
    	int L=it->l,R=it->r,V=it->val;
    	st.erase(it);
    	st.insert(Node(L,x-1,V));
    	return st.insert(Node(x,R,V)).first;
    }
    void Change(int l,int r,int v)
    {
    	int now=0;
    	Set rr=Split(r+1),ll=Split(l);
    	for(Set it=ll;it!=rr;++it)
    		if(it->val!=v)
    			now+=it->r-it->l+1;
    	num+=(v==1?now:-now);
    	st.erase(ll,rr);
    	st.insert(Node(l,r,v));
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	num=n;
    	st.insert(Node(1,n,1));
    	st.insert(Node(n+1));
    	for(int i=1;i<=m;++i)
    	{
    		int opt,l,r;
    		scanf("%d%d%d",&l,&r,&opt);
    		if(opt==1)
    			Change(l,r,0);
    		else
    			Change(l,r,1);
    		printf("%d
    ",num);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    2017.10.17笔记
    鼠标移入移出方向判断
    12.14 css3
    百叶窗 蒙版 图层
    banner轮播
    12.13
    12.11 jq基础
    11.30 AJAX
    11.28 Window事件 iframe操作
    11.28.cookie
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/10208898.html
Copyright © 2011-2022 走看看