70 条题解

  • 3
    @ 2026-10-4 11:32:55

    新用户推荐http://temege.com/p/1/solution/66a310d55ed1c81f72f96654

    这里附一个线段树代码也可AC,推荐使用

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    struct node
    {
    	int l , r , num;
    }tree [N];
    int a [N] = {} , n , tag[N];
    void ctf (int c)
    {
    	tree [c].num = tree [(c << 1)].num + tree [(c << 1) + 1].num;
    }
    void buildt (int sp , int l , int r)
    {
    	tree [sp].l = l;
    	tree [sp].r = r;
    	if(l == r)
    	{
    		tree [sp].num = a [l];
    		return;
    	}
    	int mid = l + r >> 1;
    	buildt ((sp << 1) , l , mid);
    	buildt ((sp << 1) + 1 , mid + 1 , r);
    	ctf (sp);
    }
    void f (int sp)
    {
    	int mid = tree [sp].l + tree [sp].r >> 1;
    	if (tag [sp])
    	{
    		tree [(sp << 1)].num += tag [sp] * (mid - tree[sp].l + 1);
    		tree [(sp << 1) + 1].num += tag [sp] * (tree [sp].r - mid);
    		tag [(sp << 1)] += tag [sp];
    		tag [(sp << 1) + 1] += tag [sp];
    		tag [sp] = 0;
    	}
    }
    void def (int sp , int pt , int nn)
    {
    	if(tree [sp].l == tree [sp].r)
    	{
    		tree [sp].num += nn;
    		return;
    	}
    	int mid = tree [sp].l + tree [sp].r >> 1;
    	if (pt <= mid) def ((sp << 1) , pt , nn);
    	else def((sp << 1) + 1 , pt , nn);
    	ctf (sp);
    }
    void init(int sp , int l , int r , int c)
    {
    	if(tree [sp].l >= l && tree [sp].r <= r)
    	{
    		tree [sp].num += (tree [sp].r - tree [sp].l + 1) * c;
    		tag [sp] += c;
    		return;
    	}
    	f (sp);
    	int mid = tree [sp].l + tree[sp].r >> 1;
    	if (l <= mid) init((sp << 1) , l , r , c);
    	if (mid < r) init((sp << 1) + 1 , l , r , c);
    	ctf (sp);
    }
    int answ (int sp , int l , int r)
    {
    	if (tree [sp].l >= l && tree [sp].r <= r)return tree [sp].num;
    	f (sp);
    	int mid = tree [sp].l + tree [sp].r >> 1;
    	int maxn = 0;
    	if (l <= mid) maxn = maxn + answ ((sp << 1) , l , r);
    	if (mid < r) maxn = maxn + answ ((sp << 1) + 1 , l , r);
    	return maxn;
    }
    signed main()
    {
    		int T = 1;
    	    n = 2;
    		for (int i = 1; i <= n; i++) cin >> a [i];
    	    buildt (1 , 1 , 2);
    	    cout << answ (1 , 1 , 2);
    }
    
    
    

    信息

    ID
    1
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    5322
    已通过
    1498
    上传者