首页 > 其他 > 详细

洛谷——P2846 [USACO08NOV]光开关Light Switching

时间:2018-09-19 20:54:55      阅读:196      评论:0      收藏:0      [点我收藏+]

P2846 [USACO08NOV]光开关Light Switching

 

题目大意:

灯是由高科技——外星人鼠标操控的。你只要左击两个灯所连的鼠标,

这两个灯,以及之间的灯都会由暗变亮,或由亮变暗。右击两个灯所连的鼠

标,你就可以知道这两个灯,以及之间的灯有多少灯是亮的。起初所有灯都是暗的,你的任务是在LZ之前算出灯的亮灭。

 

线段树的懒标记下传

 

#include<bits/stdc++.h>
#define N 1000005
#define LL long long
#define RE register
#define IN inline

using namespace std;

IN void in(int &x){
    int flg=1;RE char ch=getchar();x=0;
    for(;ch>9||ch<0;){if(ch==-) flg=-1;ch=getchar();}
    for(;ch<=9&&ch>=0;ch=getchar()) x=x*10+ch-0;
    x*=flg;
}

struct node{
    int l,r,w,f;
}tr[N];
int n,m,ans,X,tot;
int e[N];

IN void build(int k,int l,int r){
    tr[k].l=l;tr[k].r=r;
    if(l==r){
        tr[k].w=e[l];
        return;
    }int mid=(l+r)/2;
    build(k*2,l,mid);build(k*2+1,mid+1,r);
    tr[k].w=tr[k*2].w+tr[k*2+1].w;
}

IN void down(int k){
    tr[k].f^=1;
    tr[k*2].w=(tr[k*2].r-tr[k*2].l+1)-tr[k*2].w;
    tr[k*2+1].w=(tr[k*2+1].r-tr[k*2+1].l+1)-tr[k*2+1].w;
    tr[k*2].f^=1;
    tr[k*2+1].f^=1;
}

IN void ask_interval(int k,int l,int r){
    int ll=tr[k].l,rr=tr[k].r,mid=(ll+rr)/2;
    if(ll>=l&&rr<=r){
        ans+=tr[k].w;
        return;
    }if(tr[k].f) down(k);
    if(l<=mid) ask_interval(k*2,l,r);
    if(r>mid) ask_interval(k*2+1,l,r);
    tr[k].w=tr[k*2].w+tr[k*2+1].w;
}

IN void change_interval(int k,int l,int r){
    int ll=tr[k].l,rr=tr[k].r,mid=(ll+rr)/2;
    if(ll>=l&&rr<=r){
        tr[k].w=(rr-ll+1)-tr[k].w;
        tr[k].f^=1;
        return;
    }if(tr[k].f) down(k);
    if(l<=mid) change_interval(k*2,l,r);
    if(r>mid) change_interval(k*2+1,l,r);
    tr[k].w=tr[k*2].w+tr[k*2+1].w;
}

int main()
{
    in(n);in(m);
    build(1,1,n);
    while(m--){
        int p,l,r;
        in(p);in(l);in(r);
        if(p==0){
            change_interval(1,l,r);
        }else {
            ans=0,ask_interval(1,l,r);
            printf("%d\n",ans);
        }
    }return 0;
}

 

洛谷——P2846 [USACO08NOV]光开关Light Switching

原文:https://www.cnblogs.com/song-/p/9676569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!