这写的有啥问题
查看原帖
这写的有啥问题
575655
Chtholly_is_cute楼主2024/7/7 16:30

code:

#include<iostream>
#include<set>
#include<algorithm>
#include<vector>
#define int long long
using namespace std;
const int MOD = 1e9 + 7;
const int N = 5e5 + 5;
int n, m, seed, vmax, a[N];
struct Node {
	int l, r;
	mutable int v;
	Node(int l, int r = 0, int v = 0): l(l), r(r), v(v) {};
	bool operator < (const Node &a) const {
		return l < a.l;
	} 
};
std::set<Node> s;
std::set<Node>::iterator split(int pos) {
	std::set<Node>::iterator it = s.lower_bound(Node(pos));
	if(it != s.end() && it -> l == pos) return it;
	it--;
	if(it -> r < pos) return s.end();
	int l = it -> l, r = it -> r, v = it -> v;
	s.erase(it);
	s.insert(Node(l, pos - 1, v));
	return s.insert(Node(pos, r, v)).first;
}
void assign(int l, int r, int x) {
	std::set<Node>::iterator itr = split(r + 1);
	std::set<Node>::iterator itl = split(l);
	s.erase(itl, itr);
	s.insert(Node(l, r, x));
}
void add(int l, int r, int x) {
	std::set<Node>::iterator itr = split(r + 1);
	std::set<Node>::iterator itl = split(l);
	for(std::set<Node>::iterator it = itl; it != itr; ++it)
		it -> v += x;
}
int query(int x) {
    std::set<Node>::iterator it = s.lower_bound(Node(x));
    return a[x] + (it -> v);
}
signed main() {
    cin>>n>>m;
    int q,x,y,k;
    for(int i=1;i<=n;i++){
        scanf("%lld",a+i);
    }
    s.insert(Node(0,N,0));
    for(int i=1;i<=m;i++){
        scanf("%lld",&q);
        if(q==1){
            scanf("%lld%lld%lld",&x,&y,&k);
            add(x,y,k);
        }
        if(q==2){
            scanf("%lld",&x);
            cout<<query(x)<<endl;
        }
    }
}
2024/7/7 16:30
加载中...