社区讨论
关于使用了vector在洛谷评测机上RE而在本地测试毫无问题的情况
P1083[NOIP 2012 提高组] 借教室参与者 3已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 19 条
- 当前快照
- 1 份
- 快照标识符
- @m266kdcr
- 此快照首次捕获于
- 2024/10/12 21:16 去年
- 此快照最后确认于
- 2025/11/04 23:56 4 个月前
先说问题:本题我使用的主要思路是二分+差分区间修改,每一次都从上一次的列举到的地方 修改/还原。数组全部使用在本地测试毫无问题,提交……喜提RE
vector存储。本机测试:(测试点6)
环境:macOS 12.7.6; gcc version 14.2.0 (Homebrew GCC 14.2.0); 无O2优化
环境:macOS 12.7.6; gcc version 14.2.0 (Homebrew GCC 14.2.0); 无O2优化报了访问了访问了无法访问的内存空间与超出预期行为的错。(就离谱
代码:
C#include <iostream>
#include <vector>
using namespace std;
struct INFO
{
int start, end;
long long n;
};
int n, m, last;
vector<long long> a, temp;
vector<INFO> order;
bool check(int now)
{
if (last < now)
{
for (int i = last+1 ; i <= now ; i++)
{
temp[order[i].start] -= order[i].n;
temp[order[i].end + 1] += order[i].n;
}
last = now;
}
else if (last > now)
{
for (int i = last ; i >= now+1 ; i--)
{
temp[order[i].start] += order[i].n;
temp[order[i].end + 1] -= order[i].n;
}
last = now;
}
long long __tmp = 0;
for (int i = 1 ; i <= n ; i++)
{
__tmp += temp[i];
if (__tmp < 0)
return true;
}
return false;
}
void solve()
{
last = 0;
int left = 1, right = m+1;
while (left < right)
{
int mid = (left + right) >> 1;
if (check(mid) == true)
right = mid;
else
left = mid+1;
}
if (left > m)
cout << 0 << endl;
else
cout << -1 << endl
<< left << endl;
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
a.reserve(n + 1); temp.reserve(n + 1);
a[0] = 0;
order.reserve(m + 2);
for (int i = 1 ; i <= n ; i++)
{
cin >> a[i];
temp[i] = a[i] - a[i-1];
}
for (int i = 1 ; i <= m ; i++)
cin >> order[i].n >> order[i].start >> order[i].end;
solve();
return 0;
}
回复
共 19 条回复,欢迎继续交流。
正在加载回复...