赞
踩
其他问题可以看看我的专栏专栏链接
环境 :Win 10
64
系统 Vscode
Cpp
问题环境如下图
代码错的离谱,一直没有显示
解决方案:
shift + Ctrl + P
一起按 搜索 squiggles
如果没有显示应该就是没有安装这个插件C/C++
问题解决!!
希望对你有帮助!!
下面不用看了
加个代码测试(凑字数
) 不然系统不让我发出来
#include <iostream> #include <algorithm> #include <vector> //acwing 例题 格子染色 using namespace std; typedef pair<int, int> PII; const int N = 300010; int n, m; int a[N], s[N]; vector<int> alls;//用来保存真实的下标和想象的下标的映射关系 vector<PII> add, query; //原来保存操作输入的值 int find(int x) { //二分查找 // 因为要求前缀和,故下标从1开始方便,不用额外的再处理边界。 } int main () { cin >> n >> m; for (int i = 0; i < n;++ i) { int x, c; cin >> x >> c; add.push_back({x, c}); alls.push_back(x);//先把下标放入向量中 统一离散化 } for (int i = 0; i < m;++ i) { int l, r; cin >> l >> r; query.push_back({l, r}); alls.push_back(l); alls.push_back(r); //将其左右端点也映射进来,目的是可以让我们在虚拟的映射表里找到, //这对于我们后面的前缀和操作时是十分的方便的。如果当我们在虚拟的 //映射表里找的时候,如果没有找到左右端点,那么前缀和无法求 } sort(alls.begin(), alls.end()); //排序 alls.erase(unique(alls.begin(), alls.end()), alls.end());//去除重复元素 // 1)erase( pos, n); 删除从pos开始的n个字符,例如erase( 0, 1), // 删除0位置的一个字符,即删除第一个字符 //(2)erase( position); //删除position处的一个字符(position是个string类型的迭代器) //(3)erase(first,last);删除从first到last之间的字符, // (first和last都是迭代器)last 不能是x.end() //unique 使用之前 必须要先过一遍sort排序。再者,unique函数返的返回值是 //一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的 //下一个元素。所以如果 想要得到不重复元素的个数就需要用返回值-开始地址。 for ( auto item : add) { //先对添加里的元素映射 赋值 int x = find(item.first);//找到x的映射值 往原数组中加c a[x] += item.second; // 处理插入 } //for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值, //但是a无法影响到b容器中的元素。 for (int i = 1; i <= alls.size(); ++i) { s[i] = s[i - 1] + a[i];//前缀和 } for (auto item : query) { int l = find(item.first), r = find(item.second); cout << s[r] - s[l - 1] << endl; }//每个元素都对应一组{first, first}键值对(pair), //键值对中的第一个成员称为first,第二个成员称为second. return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。