zoukankan      html  css  js  c++  java
  • [codevs1299]切水果

    题目大意:有n个水果,每次选择一个区间,切没(orz)这些水果,求每次切好后还剩下多少水果。

    解题思路:线段树,区间修改,单点查询(根节点)。

    C++ Code:

     

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,d[500000*3+3],le,rr,cover[500000*3+3];
    void pushdown(int x,int o){
    	cover[o<<1]=cover[o<<1|1]=cover[o];
    	d[o<<1]=x+1>>1;
    	d[o<<1|1]=x>>1;
    	cover[o]=0;
    }
    void cut(int l,int r,int o){
    	if(le<=l&&r<=rr){
    		cover[o]=1;
    		d[o]=r-l+1;
    		return;
    	}
    	if(cover[o])
    	pushdown(r-l+1,o);
    	int m=l+r>>1;
    	if(le<=m)cut(l,m,o<<1);
    	if(m<rr)cut(m+1,r,o<<1|1);
    	d[o]=d[o<<1]+d[o<<1|1];
    }
    int main(void){
    	scanf("%d%d",&n,&m);
    	memset(d,0,sizeof(d));
    	memset(cover,0,sizeof(cover));
    	while(m--){
    		scanf("%d%d",&le,&rr);
    		cut(1,n,1);
    		printf("%d
    ",n-d[1]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    第八周作业
    第八周上机练习
    第七周作业
    第七次上机练习
    第六周作业
    4.9上机作业
    第五周作业
    第四次JAVA作业
    第四周作业
    第十六次作业
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7154941.html
Copyright © 2011-2022 走看看