标签:second its str https ++ cas ret return fir
Link
题意:
\(n\) 盏灯,一开始都是关着的,输入区间 \([l,r]\) 代表翻转此区间内灯泡开闭状态,问经过 \(m\) 次操作之后有多少个灯泡是开着的
思路:
差分数组
记录操作端点,若某点 \(node[x]\) 前缀和为奇数,说明从 \([node[x],node[x+1])\) 灯泡都是开着的
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
map<int,int>mp;
int main()
{
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
scanf("%d%d",&n,&m);
mp.clear();
for(int i=0;i<m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
mp[l]++,mp[r+1]--;
}
int sum=0,res=0,pre;
for(auto x:mp)
{
if(sum&1) res+=x.first-pre;
sum+=x.second;
pre=x.first;
}
printf("Case #%d: %d\n",i,res);
}
return 0;
}
The Preliminary Contest for ICPC Asia Shanghai 2019 B. Light bulbs
标签:second its str https ++ cas ret return fir
原文地址:https://www.cnblogs.com/c4Lnn/p/12403417.html