20200306(ABC)题解 by 孙晨曦

 今晚A题题解:
n<=100,直接暴力,开两个string数组a[],b[],对每个a[i]找有没有b[j](未打过标记的)==a[i],有的话把a中第i个和b中第j个都打上标记,答案就是a中没打标记的串的数量

B题题解:
先让ans=不插入元素时的总开灯时间。
预处理0-a1,a1-a2,a2-a3,...,an-M的差值(绝对值)记作k1,k2,k3,...,kn+1
对于k的奇数下标是开灯的持续时间,偶数下标就是关灯时间
然后对开灯时间求前缀和,关灯时间求后缀和
设开灯时间的前缀和数组为l1[],后缀和数组为r0[]
i从1到n枚举,答案就是max(ans,l1[i]+r0[i+1]-1),
即在ai前面插入ai-1,前面的开关灯时间段不变,后面的开关灯时间段交换,但是还要减去ai-(ai-1)的这1秒关灯时间
(不太严谨,好像还要判断是否已存在ai-1这个数了,如果存在就跳过)

C题题解:
如果坐标<=1e6的话显然用差分数组
坐标<=1e18,直接差分即TLE又MLE,所以用map充当差分数组
因为map是有序的,所以用for(auto i:Map)枚举map内的数,用pre记录刚枚举过的i-1的坐标(key),
然后统计答案时就是ans[差分前缀和]+=i.first-pre+1
原文地址:https://www.cnblogs.com/QLU-ACM/p/12430937.html