摘要: 思路:我们枚举每一个左端点,对于每一个左端点,寻找最长的满足条件的区间,这个区间长度就是左端点对答案的贡献,可以发现具有单调性,右端点只会前进不会倒退。所以我们两个指针各扫一遍区间就可以。 #include <bits/stdc++.h> #define ls p<<1 #define rs p<< 阅读全文
posted @ 2023-12-05 21:32 cxy8 阅读(20) 评论(0) 推荐(0)
摘要: 这个数据范围,\(n是1e6,a_i也是1e6\),任意\(a_i+a_j \in [0, 2e6]\),所以如果有答案我们最多枚举\(2e6\)个数就可以找到答案 void solve() { int n; cin >> n; vector<int> a(n); map<int, int> mp; 阅读全文
posted @ 2023-12-05 12:33 cxy8 阅读(22) 评论(0) 推荐(0)
摘要: 需要的是男生女生数量相同,做个转化,女生变成-1,然后求一遍前缀和,我们希望找到最长的满足\(sum(l, r)=0\)的区间也就是\(sum(r) - s(l - 1) = 0\) 考虑枚举右端点,找到最左端和它相等的sum就是对于当前右端点的最长的。 最开始想了个二分答案的假做法,011100, 阅读全文
posted @ 2023-12-05 11:29 cxy8 阅读(18) 评论(0) 推荐(0)
摘要: 思路: \[能想到平方是比较特殊的,因为x*x一定是x的倍数也就是说\sqrt[2]{x*x} = {x} \]\[所以需要考虑平法之间的数手模一下样例可以发现 [x^2 ,(x+1)^2)之间是x倍数的有x^2 \]\[x*(x+1), x*(x+2)这三个,所以可以知道平方之间有三个,只要讨论一 阅读全文
posted @ 2023-12-05 10:57 cxy8 阅读(16) 评论(0) 推荐(0)