• G.Pot


    区间加 , 区间最值

    #include <bits/stdc++.h>
    #pragma GCC optimize(3 , "Ofast" , "inline")
    using namespace std;
    typedef long long ll ;
    const int INF = 0x3f3f3f3f , N = 1e5 + 10 ;
    void read(int &x)
    {
    	x = 0 ;
    	char c = getchar() ;
    	while(!isdigit(c)) c = getchar() ;
    	while(isdigit(c)) x = x * 10 + c - 48 , c = getchar() ;
    }
    int n , q ;
    struct node
    {
    	int l , r , sum , tag ;
    }tree2[N << 2] , tree3[N << 2] , tree5[N << 2] , tree7[N << 2];
    void build(int l , int r , int rt , node *a)
    {
    	a[rt].l = l , a[rt].r = r , a[rt].sum = a[rt].tag = 0 ;
    	if(l == r) 
    	 return ;
    	int mid = l + r >> 1 ;
    	build(l , mid , rt << 1 , a) , build(mid + 1 , r , rt << 1 | 1 , a) ;
    }
    void push_down(int rt , node *a)
    {
    	if(a[rt].l == a[rt].r)
    	{
    		a[rt].tag = 0 ;
    		return ;
    	}
    	a[rt << 1].sum += a[rt].tag ;
    	a[rt << 1 | 1].sum += a[rt].tag ;
    	a[rt << 1].tag += a[rt].tag ;
    	a[rt << 1 | 1].tag += a[rt].tag ;
    	a[rt].tag = 0 ;
    }
    void update(int l , int r , int rt ,int k , node *a)
    {
    	if(l == a[rt].l && r == a[rt].r)
    	 {
    	 	a[rt].sum += k ;
    	 	a[rt].tag += k ;
    		 return ; 
    	 }
    	 if(a[rt].tag) push_down(rt , a) ;
    	 int mid = a[rt].l + a[rt].r >> 1 ;
    	 if(r <= mid) update(l , r , rt << 1 , k , a) ;
    	 else if(l > mid) update(l , r , rt << 1 | 1 , k , a) ;
    	 else 
    	  {
    	  	update(l , mid , rt << 1 , k , a) ;
    	  	update(mid + 1 ,r , rt << 1 | 1 , k , a) ;
    	  	
    	  }
    	  a[rt].sum = max(a[rt << 1].sum , a[rt << 1 | 1].sum) ;
    }
    int query(int l , int r , int rt ,node *a)
    {
    	if(a[rt].tag) push_down(rt , a) ;
    	if(l == a[rt].l && r == a[rt].r)
    		return a[rt].sum ;
    	int mid = a[rt].l + a[rt].r >> 1 ;
    	if(r <= mid) return query(l , r ,rt << 1 , a) ;
    	else if(l > mid) return query(l , r , rt << 1 | 1 , a) ;
    	else return max(query(l , mid , rt << 1 , a) , query(mid + 1 , r , rt << 1 | 1 , a)) ;
    }
    int main()
    {
        read(n) , read(q) ;
        build(1 , n , 1 , tree2) , build(1 , n , 1 , tree3) , build(1 , n , 1 , tree5) , build(1 , n , 1 , tree7) ;
        for(int i = 1; i <= q; i ++)
        {
        	char s[20] ;
        	int l , r , x ;
        	scanf("%s" , s) ;
        	read(l) , read(r) ;
        	if(s[1] == 'A') 
        	 {
        	 	int max1 = max(query(l , r , 1 , tree2) ,query(l , r , 1 , tree3) ) ;
        	 	int max2 = max(query(l , r , 1 , tree5) ,query(l , r , 1 , tree7) ) ;
        	 	printf("ANSWER %d
    " , max(max1 , max2)) ;
    		 }
    		 else 
    		  {
    		  	read(x) ;
    		  	if(x == 2) update(l , r , 1 , 1 , tree2) ;
    		  	else if(x == 3) update(l , r , 1 , 1 , tree3) ;
    		  	else if(x == 4) update(l , r , 1 , 2 , tree2) ;
    		  	else if(x == 5) update(l , r , 1 , 1 , tree5) ;
    		  	else if(x == 6) update(l , r , 1 , 1 , tree2) , update(l , r , 1 , 1 , tree3) ;
    		  	else if(x == 7) update(l , r , 1 , 1 , tree7) ;
    		  	else if(x == 8) update(l , r , 1 , 3 , tree2) ;
    		  	else if(x == 9) update(l , r , 1 , 2 , tree3) ;
    		  	else if(x == 10) update(l , r , 1 , 1 , tree2) , update(l , r , 1 , 1 , tree5) ;
    		  }
    	}
    	return 0 ;
    }
    
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    Istio安装配置及使用
    Istio介绍
    Rancher管理k8s集群
    EFK部署
    常见日志收集方案及相关组件
    Prometheus Pushgateway
    Prometheus监控拓展
    Prometheus PromQL语法
    开始新工作了
    SpringBlade 新系统 运行
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870867.html
Copyright © 2020-2023  润新知