제출 #169016

#제출 시각아이디문제언어결과실행 시간메모리
169016LawlietSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
281 ms6412 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int lli; const int MAXN = 100010; class SegmentTree { public: int getLeft(int node) { return 2*node; } int getRight(int node) { return 2*node + 1; } void update(int node, int l, int r, int i, int v) { if( i < l || r < i ) return; if( l == r ) return void( sum[node] = v ); int m = ( l + r )/2; update( getLeft(node) , l , m , i , v ); update( getRight(node) , m + 1 , r , i , v ); sum[ node ] = sum[ getLeft(node) ] + sum[ getRight(node) ]; } void spray(int node, int l, int r, int i, int j, int K) { if( K == 1 ) return; if( sum[node] == 0 ) return; if( j < l || r < i ) return; if( l == r ) return void( sum[node] /= K ); int m = ( l + r )/2; spray( getLeft(node) , l , m , i , j , K ); spray( getRight(node) , m + 1 , r , i , j , K ); sum[ node ] = sum[ getLeft(node) ] + sum[ getRight(node) ]; } lli query(int node, int l, int r, int i, int j) { if( j < l || r < i ) return 0; if( i <= l && r <= j ) return sum[node]; int m = ( l + r )/2; lli sumLeft = query( getLeft(node) , l , m , i , j ); lli sumRight = query( getRight(node) , m + 1 , r , i , j ); return sumLeft + sumRight; } SegmentTree() { memset( sum , 0 , sizeof(sum) ); } private: lli sum[4*MAXN]; }; int n, q, k; SegmentTree SEG; int main() { scanf("%d %d %d",&n,&q,&k); for(int i = 1 ; i <= n ; i++) { int v; scanf("%d",&v); SEG.update( 1 , 1 , n , i , v ); } for(int i = 1 ; i <= q ; i++) { int type, L, R; scanf("%d %d %d",&type,&L,&R); if( type == 1 ) SEG.update( 1 , 1 , n , L , R ); if( type == 2 ) SEG.spray( 1 , 1 , n , L , R , k ); if( type == 3 ) printf("%lld\n",SEG.query( 1 , 1 , n , L , R )); } }

컴파일 시 표준 에러 (stderr) 메시지

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:71:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&n,&q,&k);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:76:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&v);
   ~~~~~^~~~~~~~~
sterilizing.cpp:84:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d",&type,&L,&R);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...