답안 #885509

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
885509 2023-12-09T22:03:52 Z vjudge1 Foehn Phenomena (JOI17_foehn_phenomena) C++17
40 / 100
1000 ms 17232 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
struct Segment_tree
{
	struct node
	{
		int value, lazy;
 
		node(int v = 0)
		{
			value = v;
			lazy = 0;
		}
	};
 
	vector <node> tree; int l;
 
	void update(int v, int s, int e, int k)
	{
		tree[v].lazy += k;
		tree[v].value += (e - s + 1) * k;
	}
 
	void push(int v, int s, int e)
	{
		if (tree[v].lazy)
		{
			int middle = (s + e) / 2;
 
			update(2 * v, s, middle, tree[v].lazy);
			update(2 * v + 1, middle + 1, e, tree[v].lazy);
 
			tree[v].lazy = 0;
		}
	}
 
	void increase(int node, int v, int x, int y, int s, int e)
	{
		if (x > e || y < s) return;
 
		if (s >= x && e <= y)
		{
			update(node, s, e, v);
			return;
		}
 
		push(node, s, e);
 
		int middle = (s + e) / 2;
 
		increase(node * 2, v, x, y, s, middle);
		increase(node * 2 + 1, v, x, y, middle + 1, e);
 
		tree[node].value = tree[node * 2].value
			+ tree[node * 2 + 1].value;
	}
 
	void increase(int x, int y, int v) { increase(1, v, x, y, 1, l); }
 
	int sum(int node, int x, int y, int s, int e)
	{
		if (x > e || y < s) return 0;
 
		if (s >= x && e <= y)
			return tree[node].value;
 
		push(node, s, e);
		int middle = (s + e) / 2;
 
		return sum(node * 2, x, y, s, middle) +
			sum(node * 2 + 1, x, y, middle + 1, e);
	}
 
	int query(int x) { return sum(1, x, x, 1, l); }
 
	Segment_tree(int n)
	{
		for (l = 1; l < n; l = (l << 1));
		tree.resize(2 * l);
	}
};
 
 
int32_t main()
{
    ll n,q,s,t;
    cin>>n>>q>>s>>t;
    ll cad[n+1];
    Segment_tree asd(n+2);
    for(int i=0; i<n+1; i++)
    {
        cin>>cad[i];
    }
    ll u=0,d=0;
    for(int i=1; i<=n; i++)
    {
        u+=max(cad[i]-cad[i-1],0LL);
        d+=max(cad[i-1]-cad[i],0LL);
        asd.increase(i+1,i+1,cad[i]);
    }
    while(q--)
    {
        ll a,b,c;
        cin>>a>>b>>c;
        a++;
        b++;
        u-=max(asd.query(a)-asd.query(a-1),0LL);
        d-=max(asd.query(a-1)-asd.query(a),0LL);
        if(b!=n+1){
        u-=max(asd.query(b+1)-asd.query(b),0LL);
        d-=max(asd.query(b)-asd.query(b+1),0LL);}

        asd.increase(a,b,c);
        
        u+=max(asd.query(a)-asd.query(a-1),0LL);
        d+=max(asd.query(a-1)-asd.query(a),0LL);
        if(b!=n+1){
        u+=max(asd.query(b+1)-asd.query(b),0LL);
        d+=max(asd.query(b)-asd.query(b+1),0LL);}
        cout<<-u*s+d*t<<"\n";
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 348 KB Output is correct
2 Correct 8 ms 532 KB Output is correct
3 Correct 8 ms 348 KB Output is correct
4 Correct 8 ms 348 KB Output is correct
5 Correct 8 ms 348 KB Output is correct
6 Correct 8 ms 348 KB Output is correct
7 Correct 8 ms 532 KB Output is correct
8 Correct 8 ms 348 KB Output is correct
9 Correct 8 ms 348 KB Output is correct
10 Correct 8 ms 348 KB Output is correct
11 Correct 8 ms 428 KB Output is correct
12 Correct 8 ms 344 KB Output is correct
13 Correct 6 ms 348 KB Output is correct
14 Correct 6 ms 348 KB Output is correct
15 Correct 8 ms 348 KB Output is correct
16 Correct 6 ms 520 KB Output is correct
17 Correct 6 ms 344 KB Output is correct
18 Correct 6 ms 520 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 965 ms 11736 KB Output is correct
2 Correct 982 ms 12196 KB Output is correct
3 Correct 982 ms 15788 KB Output is correct
4 Correct 969 ms 15044 KB Output is correct
5 Correct 983 ms 16212 KB Output is correct
6 Correct 627 ms 15760 KB Output is correct
7 Correct 612 ms 15692 KB Output is correct
8 Correct 881 ms 16112 KB Output is correct
9 Correct 875 ms 16524 KB Output is correct
10 Correct 862 ms 15184 KB Output is correct
11 Correct 704 ms 15632 KB Output is correct
12 Correct 632 ms 15980 KB Output is correct
13 Correct 618 ms 16424 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 348 KB Output is correct
2 Correct 8 ms 532 KB Output is correct
3 Correct 8 ms 348 KB Output is correct
4 Correct 8 ms 348 KB Output is correct
5 Correct 8 ms 348 KB Output is correct
6 Correct 8 ms 348 KB Output is correct
7 Correct 8 ms 532 KB Output is correct
8 Correct 8 ms 348 KB Output is correct
9 Correct 8 ms 348 KB Output is correct
10 Correct 8 ms 348 KB Output is correct
11 Correct 8 ms 428 KB Output is correct
12 Correct 8 ms 344 KB Output is correct
13 Correct 6 ms 348 KB Output is correct
14 Correct 6 ms 348 KB Output is correct
15 Correct 8 ms 348 KB Output is correct
16 Correct 6 ms 520 KB Output is correct
17 Correct 6 ms 344 KB Output is correct
18 Correct 6 ms 520 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 965 ms 11736 KB Output is correct
23 Correct 982 ms 12196 KB Output is correct
24 Correct 982 ms 15788 KB Output is correct
25 Correct 969 ms 15044 KB Output is correct
26 Correct 983 ms 16212 KB Output is correct
27 Correct 627 ms 15760 KB Output is correct
28 Correct 612 ms 15692 KB Output is correct
29 Correct 881 ms 16112 KB Output is correct
30 Correct 875 ms 16524 KB Output is correct
31 Correct 862 ms 15184 KB Output is correct
32 Correct 704 ms 15632 KB Output is correct
33 Correct 632 ms 15980 KB Output is correct
34 Correct 618 ms 16424 KB Output is correct
35 Correct 977 ms 14692 KB Output is correct
36 Correct 975 ms 16068 KB Output is correct
37 Correct 984 ms 17232 KB Output is correct
38 Correct 981 ms 17112 KB Output is correct
39 Execution timed out 1002 ms 16980 KB Time limit exceeded
40 Halted 0 ms 0 KB -