LITE - Light Switching - SPOJ Solution C++

  Problem Link : LITE 


👉 Hint : edit please

 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

int st[400000];
int lazy[400000];

void propagateLazy(int ind,int l,int r)
{
	if(l!=r)
	{
		lazy[2*ind+1]=(lazy[2*ind+1]+1)%2;
		lazy[2*ind+2]=(lazy[2*ind+2]+1)%2;
	}
	st[ind]=(r-l+1)-st[ind];
	lazy[ind]=0;
}

void update(int ind,int l,int r,int ql,int qr)
{
	if(lazy[ind])
		propagateLazy(ind,l,r);
	if(r<ql || l>qr)
		return;	
	if(ql<=l && r<=qr)
	{
		lazy[ind]=1;
		propagateLazy(ind,l,r);
		return;
	}
	int m=(l+r)/2;
	update(2*ind+1,l,m,ql,qr);
	update(2*ind+2,m+1,r,ql,qr);
	st[ind]=st[2*ind+1]+st[2*ind+2];
}

int query(int ind,int l,int r,int ql,int qr)
{
	if(lazy[ind])
		propagateLazy(ind,l,r);
	if(r<ql || l>qr)
		return 0;
	if(ql<=l && r<=qr)
		return st[ind];
	int m=(l+r)/2;
	return query(2*ind+1,l,m,ql,qr)+query(2*ind+2,m+1,r,ql,qr);


}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	int n,m,l,r,i;
	cin>>n>>m;
	memset(lazy,0,sizeof(lazy));
	while(m--)
	{
		cin>>i>>l>>r;
		if(i==0)
			update(1,1,n,l,r);
		else
		{
			cout<<query(1,1,n,l,r)<<endl;
		}
	}
}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!