大佬求解,为什么我这段代码结果不对,但我觉得思路没问题
12359查看
请问大佬们,为什么我这段代码算出来的不对?
include;
include;
include;
using namespace std; int n, m; int l[300010], r[300010]; int pre[300010]; int a[300010];
typedef pair<int, int> p; vector
t;
int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> l[i] >> r[i]; a[l[i]]++; a[r[i] + 1]--; }
int z = 0;
bool isEnter = false;
int lt = 0;
for (int i = 1; i <= n; i++)
{
z += a[i];
if (z == 0) pre[i] = pre[i - 1] + 1;
else pre[i] = pre[i - 1];
if (z >= 2 && !isEnter)
{
isEnter = true;
lt = i;
}
else if (z < 2 && isEnter)
{
isEnter = false;
t.push_back({ lt,i - 1 });
}
}
for (int i = 1; i <= m; i++)
{
int ans = pre[n];
int num = 0;
for (int j = 0; j < t.size(); j++)
{
if (t[j].second<l[i] || t[j].first>r[i]) continue;
if (l[i] >= t[j].first)
{
if (r[i] <= t[j].first)
{
num += r[i] - l[i] + 1;
}
else {
num += t[j].second - l[i] + 1;
}
}
else {
num += r[i] - t[j].first + 1;
}
}
int num0 = pre[r[i]] - pre[l[i] - 1];
ans += r[i] - l[i] + 1 - num0 - num;
cout << ans << endl;
}
return 0;
copy
}
#课程问答
| 关注
你的回复
请
登录
后回复