제출 #121616

#제출 시각아이디문제언어결과실행 시간메모리
121616dualityBitaro, who Leaps through Time (JOI19_timeleap)C++11
4 / 100
353 ms11320 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 L[300000],R[300000]; int T[300000],A[300000],B[300000],C[300000],D[300000]; int l[300000],r[300000]; LLI ans[300000]; struct func { LLI b,x1,x2; LLI b2,x3; int init() { b = x1 = 0,x2 = 1e12; b2 = 0,x3 = 1e12; } int apply(int l,int r) { if (x1 == x2) { if (b < l) b = l; else if (b > r) b2 += b-r,b = r; } else { if (l > b+x2-x1) x1 = x2 = 0,b = l; else if (l > b) x1 += l-b,b = l; if (r < b) { b2 += b-r,x3 = x1; x1 = x2 = 0,b = r; } else if (r < b+x2-x1) x2 = x3 = x2-(b+x2-x1-r); } return 0; } plli eval(int x) { LLI p,q; if (x < x1) p = b; else if (x < x2) p = b+x-x1; else p = b+x2-x1; if (x < x3) q = b2; else q = b2+x-x3; return mp(p,q); } }; int main() { int i,j; int N,Q; scanf("%d %d",&N,&Q); for (i = 0; i < N-1; i++) scanf("%d %d",&L[i],&R[i]); for (i = 0; i < Q; i++) { scanf("%d",&T[i]); if (T[i] == 1) scanf("%d %d %d",&A[i],&B[i],&C[i]),A[i]--,ans[i] = -1; else scanf("%d %d %d %d",&A[i],&B[i],&C[i],&D[i]),A[i]--,C[i]--; } int rr; for (rr = 0; rr < 2; rr++) { for (i = 0; i < N-1; i++) l[i] = L[i]-i,r[i] = R[i]-i-1; if (N*Q <= 1e6) { for (i = 0; i < Q; i++) { if (T[i] == 1) l[A[i]] = B[i]-A[i],r[A[i]] = C[i]-A[i]-1; else if ((T[i] == 2) && (A[i] <= C[i])) { func f; f.init(); for (j = A[i]; j < C[i]; j++) f.apply(l[j],r[j]); plli p = f.eval(B[i]-A[i]); if (p.first > D[i]-C[i]) p.second += p.first-(D[i]-C[i]); ans[i] = p.second; } } } reverse(L,L+N-1),reverse(R,R+N-1); for (i = 0; i < Q; i++) { if (T[i] == 1) A[i] = N-2-A[i]; else if (T[i] == 2) A[i] = N-1-A[i],C[i] = N-1-C[i]; } } for (i = 0; i < Q; i++) { if (ans[i] != -1) printf("%lld\n",ans[i]); } return 0; }

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

timeleap.cpp: In member function 'int func::init()':
timeleap.cpp:65:58: warning: no return statement in function returning non-void [-Wreturn-type]
     int init() { b = x1 = 0,x2 = 1e12; b2 = 0,x3 = 1e12; }
                                                          ^
timeleap.cpp: In function 'int main()':
timeleap.cpp:96:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d",&N,&Q);
     ~~~~~^~~~~~~~~~~~~~~
timeleap.cpp:97:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for (i = 0; i < N-1; i++) scanf("%d %d",&L[i],&R[i]);
                               ~~~~~^~~~~~~~~~~~~~~~~~~~~
timeleap.cpp:99:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&T[i]);
         ~~~~~^~~~~~~~~~~~
timeleap.cpp:100:66: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         if (T[i] == 1) scanf("%d %d %d",&A[i],&B[i],&C[i]),A[i]--,ans[i] = -1;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
timeleap.cpp:101:65: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         else scanf("%d %d %d %d",&A[i],&B[i],&C[i],&D[i]),A[i]--,C[i]--;
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...