Submission #58526
ソースコード
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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | #include<bits/stdc++.h> using namespace std; #define INF 2147483647 // 2^31-1 struct segmenttreesum{ int N; vector< int > value; segmenttreesum( int n){ N=1; while (N<n){ N*=2; } value=vector< int >(2*N-1,0); } void update( int i, int x){ i+=N-1; value[i]=x; while (i>0){ i=(i-1)/2; value[i]=(value[i*2+1]+value[i*2+2]); } } void add( int i, int x){ i+=N-1; value[i]+=x; while (i>0){ i=(i-1)/2; value[i]=(value[i*2+1]+value[i*2+2]); } } int query( int a, int b, int k, int l, int r){ if (r<=a || b<=l){ return 0; } else if (a<=l && r<=b){ return value[k]; } else { int c1=query(a,b,2*k+1,l,(l+r)/2); int c2=query(a,b,2*k+2,(l+r)/2,r); return (c1+c2); } } }; struct segmenttreemax{ int N; vector< int > value; segmenttreemax( int n){ N=1; while (N<n){ N*=2; } value=vector< int >(2*N-1,-99999999); } void update( int i, int x){ i+=N-1; value[i]=x; while (i>0){ i=(i-1)/2; value[i]=max(value[i*2+1],value[i*2+2]); } } void add( int i, int x){ i+=N-1; value[i]+=x; while (i>0){ i=(i-1)/2; value[i]=max(value[i*2+1],value[i*2+2]); } } int query( int a, int b, int k, int l, int r){ if (r<=a || b<=l){ return -99999999; } else if (a<=l && r<=b){ return value[k]; } else { int c1=query(a,b,2*k+1,l,(l+r)/2); int c2=query(a,b,2*k+2,(l+r)/2,r); return max(c1,c2); } } }; struct segmenttreemin{ int N; vector< int > value; segmenttreemin( int n){ N=1; while (N<n){ N*=2; } value=vector< int >(2*N-1,INF); } void update( int i, int x){ i+=N-1; value[i]=x; while (i>0){ i=(i-1)/2; value[i]=min(value[i*2+1],value[i*2+2]); } } void add( int i, int x){ i+=N-1; value[i]+=x; while (i>0){ i=(i-1)/2; value[i]=min(value[i*2+1],value[i*2+2]); } } int query( int a, int b, int k, int l, int r){ if (r<=a || b<=l){ return INF; } else if (a<=l && r<=b){ return value[k]; } else { int c1=query(a,b,2*k+1,l,(l+r)/2); int c2=query(a,b,2*k+2,(l+r)/2,r); return min(c1,c2); } } }; int main(){ int n,m; cin>>n>>m; segmenttreesum sgsum(n); segmenttreemax sgmax(n); segmenttreemin sgmin(n); int x,y; string s; for ( int i=0;i<n;i++){ sgsum.update(i,0); sgmin.update(i,0); sgmax.update(i,0); } for ( int i=0;i<m;i++){ cin>>s>>x>>y; if (s[0]== 'u' ){ sgsum.update(x,y); sgmin.update(x,y); sgmax.update(x,y); } else if (s[0]== 'a' ){ sgsum.add(x,y); sgmin.add(x,y); sgmax.add(x,y); } else if (s[3]== 'S' ){ cout<<sgsum.query(x,y,0,0,sgsum.N)<< '\n' ; } else if (s[3]== 'M' && s[4]== 'a' ){ cout<<sgmax.query(x,y,0,0,sgmax.N)<< '\n' ; } else { cout<<sgmin.query(x,y,0,0,sgmin.N)<< '\n' ; } } return (0); } |
ステータス
項目 | データ |
---|---|
問題 | 1072 - セグメントツリー技術基礎 |
ユーザー名 | ei1918 |
投稿日時 | 2020-02-07 14:53:23 |
言語 | C++14 |
状態 | Accepted |
得点 | 1 |
ソースコード長 | 3152 Byte |
最大実行時間 | 190 ms |
最大メモリ使用量 | 9104 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 1 / 1 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
in01 | AC | 25 ms | 600 KB |
1
|
in02 | AC | 137 ms | 952 KB |
1
|
in03 | AC | 102 ms | 4024 KB |
1
|
in04 | AC | 164 ms | 4116 KB |
1
|
in05 | AC | 48 ms | 4072 KB |
1
|
in06 | AC | 83 ms | 2752 KB |
1
|
in07 | AC | 107 ms | 2968 KB |
1
|
in08 | AC | 178 ms | 2540 KB |
1
|
in09 | AC | 149 ms | 4932 KB |
1
|
in10 | AC | 181 ms | 3736 KB |
1
|
in11 | AC | 46 ms | 2924 KB |
1
|
in12 | AC | 75 ms | 2248 KB |
1
|
in13 | AC | 152 ms | 5580 KB |
1
|
in14 | AC | 190 ms | 3744 KB |
1
|
in15 | AC | 111 ms | 6136 KB |
1
|
in16 | AC | 159 ms | 3664 KB |
1
|
in17 | AC | 138 ms | 6444 KB |
1
|
in18 | AC | 74 ms | 6660 KB |
1
|
in19 | AC | 146 ms | 6756 KB |
1
|
in20 | AC | 85 ms | 6840 KB |
1
|
in21 | AC | 101 ms | 5516 KB |
1
|
in22 | AC | 177 ms | 5864 KB |
1
|
in23 | AC | 124 ms | 7616 KB |
1
|
in24 | AC | 141 ms | 6300 KB |
1
|
in25 | AC | 160 ms | 5744 KB |
1
|
in26 | AC | 179 ms | 8388 KB |
1
|
in27 | AC | 163 ms | 8604 KB |
1
|
in28 | AC | 189 ms | 7396 KB |
1
|
in29 | AC | 69 ms | 8892 KB |
1
|
in30 | AC | 162 ms | 9104 KB |
1
|
in31 | AC | 102 ms | 7656 KB |
1
|
in32 | AC | 152 ms | 7996 KB |
1
|