제출 #68308

#제출 시각아이디문제언어결과실행 시간메모리
68308dualitySterilizing Spray (JOI15_sterilizing)C++11
100 / 100
282 ms72356 KiB
#define DEBUG 0 #include <bits/stdc++.h> using namespace std; #if DEBUG // basic debugging macros int __i__,__j__; #define printLine(l) for(__i__=0;__i__<l;__i__++){cout<<"-";}cout<<endl #define printLine2(l,c) for(__i__=0;__i__<l;__i__++){cout<<c;}cout<<endl #define printVar(n) cout<<#n<<": "<<n<<endl #define printArr(a,l) cout<<#a<<": ";for(__i__=0;__i__<l;__i__++){cout<<a[__i__]<<" ";}cout<<endl #define print2dArr(a,r,c) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<a[__i__][__j__]<<" ";}cout<<endl;} #define print2dArr2(a,r,c,l) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<setw(l)<<setfill(' ')<<a[__i__][__j__]<<" ";}cout<<endl;} // advanced debugging class // debug 1,2,'A',"test"; class _Debug { public: template<typename T> _Debug& operator,(T val) { cout << val << endl; return *this; } }; #define debug _Debug(), #else #define printLine(l) #define printLine2(l,c) #define printVar(n) #define printArr(a,l) #define print2dArr(a,r,c) #define print2dArr2(a,r,c,l) #define debug #endif // define #define MAX_VAL 999999999 #define MAX_VAL_2 999999999999999999LL #define EPS 1e-6 #define mp make_pair #define pb push_back // typedef typedef unsigned int UI; typedef long long int LLI; typedef unsigned long long int ULLI; typedef unsigned short int US; typedef pair<int,int> pii; typedef pair<LLI,LLI> plli; typedef vector<int> vi; typedef vector<LLI> vlli; typedef vector<pii> vpii; typedef vector<plli> vplli; // ---------- END OF TEMPLATE ---------- int C[100000]; LLI bit[100001]; LLI query(int i) { LLI sum = 0; for (i++; i > 0; i -= i & (-i)) sum += bit[i]; return sum; } int update(int i,LLI num,int N) { for (i++; i <= N; i += i & (-i)) bit[i] += num; return 0; } set<int> s; int main() { int i; int N,Q,K; int S,T,U; scanf("%d %d %d",&N,&Q,&K); for (i = 0; i < N; i++) { scanf("%d",&C[i]),update(i,C[i],N); if (C[i] > 0) s.insert(i); } for (i = 0; i < Q; i++) { scanf("%d %d %d",&S,&T,&U); if (S == 1) { T--; update(T,U-C[T],N),C[T] = U; if ((K > 1) && (U > 0)) s.insert(T); } else if (S == 2) { T--,U--; if (K > 1) { auto it = s.lower_bound(T); while ((it != s.end()) && (*it <= U)) { update(*it,(C[*it]/K)-C[*it],N); C[*it] /= K; if (C[*it] == 0) it = s.erase(it); else it++; } } } else printf("%lld\n",query(U-1)-query(T-2)); } return 0; }

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

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:74:10: 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:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&C[i]),update(i,C[i],N);
         ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
sterilizing.cpp:80:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d",&S,&T,&U);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...