Submission #72161
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #include<bits/stdc++.h> using namespace std; #define ll long long #define vi vector<int> #define all(v2) v2.begin(),v2.end() #define fi first #define se second #define P pair<int,int> #define mp(a,b) make_pair(a,b) #define pb(a) push_back(a) int mod=1e9+7; int inf=INT_MAX; vector< int > a(200005); vector<ll> b(200005); struct segtree{ int n; vector<ll> node,lazy; segtree( int sz){ n=1; while (n<sz) n*=2; node.resize(2*n,0); lazy.resize(2*n,inf); for ( int i=0;i<sz;i++){ node[n+i-1]=a[i]; } for ( int i=n-2;i>=0;i--){ node[i]=node[i*2+1]+node[i*2+2]; } } void eval( int k, int l, int r){ if (lazy[k]!=inf){ node[k]=b[r+lazy[k]]-b[l+lazy[k]]; if (r-l>1){ lazy[2*k+1]=lazy[k]; lazy[2*k+2]=lazy[k]; } lazy[k]=inf; } } void add( int a, int b,ll x){ add(a,b+1,x,0,0,n); } void add( int a, int b,ll x, int k, int l, int r){ eval(k,l,r); if (b<=l || r<=a) return ; if (a<=l && r<=b){ lazy[k]=x; eval(k,l,r); } else { add(a,b,x,2*k+1,l,(r+l)/2); add(a,b,x,2*k+2,(r+l)/2,r); node[k]=node[2*k+1]+node[2*k+2]; } } ll getsum( int a, int b){ return getsum(a,b+1,0,0,n); } ll getsum( int a, int b, int k, int l, int r){ if (b<=l || r<=a) return 0; eval(k,l,r); if (a<=l && r<=b) return node[k]; else { ll vl=getsum(a,b,2*k+1,l,(r+l)/2); ll vr=getsum(a,b,2*k+2,(r+l)/2,r); return vl+vr; } } }; //cout<<fixed<<setprecision(5); int main(){ cin.tie(nullptr); ios_base::sync_with_stdio( false ); int n,m; cin>>n>>m; for ( int i=0;i<n;i++){ cin>>a[i]; } b[0]=0; for ( int i=1;i<=n;i++){ cin>>b[i]; b[i]+=b[i-1]; } segtree st(n); for ( int i=0;i<m;i++){ int op; cin>>op; if (op==0){ int x,y,z; cin>>x>>y>>z; x--; y--; st.add(x,x+z-1,y-x); } else { int p,q; cin>>p>>q; p--; q--; cout<<st.getsum(p,q)<< "\n" ; } } return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 1446 - Copy&Sum |
ユーザー名 | ei2005 |
投稿日時 | 2022-09-01 14:00:23 |
言語 | C++17 |
状態 | Accepted |
得点 | 12 |
ソースコード長 | 2429 Byte |
最大実行時間 | 193 ms |
最大メモリ使用量 | 19128 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 12 / 12 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
in1 | AC | 21 ms | 2908 KB |
1
|
in2 | AC | 31 ms | 2848 KB |
1
|
in3 | AC | 27 ms | 10960 KB |
1
|
in4 | AC | 22 ms | 10996 KB |
1
|
in5 | AC | 20 ms | 11036 KB |
1
|
in6 | AC | 21 ms | 10952 KB |
1
|
in7 | AC | 21 ms | 10980 KB |
1
|
in8 | AC | 17 ms | 10892 KB |
1
|
in9 | AC | 18 ms | 10932 KB |
1
|
in10 | AC | 18 ms | 2684 KB |
1
|
in11 | AC | 26 ms | 2720 KB |
1
|
in12 | AC | 25 ms | 2760 KB |
1
|
in13 | AC | 23 ms | 2804 KB |
1
|
in14 | AC | 30 ms | 2840 KB |
1
|
in15 | AC | 20 ms | 2872 KB |
1
|
in16 | AC | 23 ms | 2904 KB |
1
|
in17 | AC | 22 ms | 2940 KB |
1
|
in18 | AC | 23 ms | 2956 KB |
1
|
in19 | AC | 25 ms | 2828 KB |
1
|
in20 | AC | 27 ms | 3020 KB |
1
|
in21 | AC | 184 ms | 12104 KB |
1
|
in22 | AC | 193 ms | 13536 KB |
1
|
in23 | AC | 173 ms | 14960 KB |
1
|
in24 | AC | 183 ms | 16524 KB |
1
|
in25 | AC | 141 ms | 17824 KB |
1
|
in26 | AC | 149 ms | 19128 KB |
1
|