├── .gitignore ├── LICENSE ├── Online Judge Solve └── Toph │ ├── BDYP & Duoblogger Home Quarantine Contest │ ├── Corona Virus Attacked Kittuk.cpp │ ├── Energy Production.cpp │ ├── Hablu Is in Quarantine.cpp │ ├── Hablu's Team.cpp │ ├── Hide and Seek.cpp │ ├── Justify the Invention !.cpp │ ├── Killing Floor.cpp │ ├── Marks Crisis!!!.cpp │ ├── Social Distancing.cpp │ └── Yet Another Xinversion !.cpp │ ├── BSMRSTU Intra University Programming Contest 2019 │ ├── Aloyna and CAN buying.cpp │ ├── Beauty of AP.cpp │ ├── Building the Number.cpp │ ├── Erik and His Buggy Code.cpp │ ├── Hamming Distance.cpp │ ├── Hardest Problem Ever.cpp │ ├── Mad Engineer Aksir.cpp │ ├── Memes vs. Social Media.cpp │ ├── Palindromic Naming Convention.cpp │ ├── Poltu and Graph.cpp │ ├── Poltu and Interesting Number.cpp │ └── Poltu and Odd Number.cpp │ └── National Girls' Programming Contest 2019 Preliminary │ ├── Arshiya's First Code.cpp │ ├── Day-Month-Year.cpp │ ├── Déjà Vu.cpp │ ├── Expected Result.cpp │ ├── Messy Table.cpp │ ├── Modulo.cpp │ ├── Palindrome Again.cpp │ ├── The Archipelago of Mirpur.cpp │ └── Weird Cake.cpp ├── README.md ├── Resources └── BlogList.md ├── Template Codes ├── 2D_Range_Minimum_Query.cpp ├── Anti_Frustration_Template.cpp ├── BPM-Hopcroft-Karp.cpp ├── BPM.cpp ├── BackTrack │ └── Gym100110A.cpp ├── Bridge.cpp ├── Burnside_Lemma.txt ├── Centroid_Decomposition.cpp ├── ClosestPairPoints.cpp ├── CycleCheckDirectedGraph.cpp ├── Data Structures │ ├── BIT │ │ ├── BIT.cpp │ │ ├── BIT_2D.cpp │ │ ├── BIT_2D_Range.cpp │ │ ├── BIT_3D.cpp │ │ └── BIT_Range.cpp │ ├── HLD_Experiments │ │ ├── FirstTry.cpp │ │ └── QTREE.cpp │ ├── Link Cut Tree │ │ ├── Link-Cut-Tree-RMT.cpp │ │ ├── Link-Cut-Tree-Root.cpp │ │ └── Link-Cut-Tree.cpp │ └── Segment Tree │ │ ├── PersistentRangeMinimumQuery.cpp │ │ ├── SegTree2D.cpp │ │ ├── SegTreeAndOr.cpp │ │ ├── SegTreeID.cpp │ │ ├── SegTreeLazy.cpp │ │ ├── SegTreePersistent.cpp │ │ ├── SegTreeRangeIncrementRangeMax.cpp │ │ └── SparseTable.cpp ├── DequeTechnique.cpp ├── Dijkstra.cpp ├── Dp Optimizations │ ├── D&C_NKLEAVES.cpp │ ├── Divide_And_Conquer.cpp │ └── Sibling Dp.cpp ├── DsuOnTree_246E.cpp ├── FFT.cpp ├── GaussianElemination.cpp ├── Geometry │ ├── ConvexHull.cpp │ ├── Geometry.cpp │ ├── Geometry_Knight_of_Thirteen.cpp │ ├── Geometry_Recollected.cpp │ └── PointInsidePolygon.cpp ├── Graph │ ├── BPM │ │ └── Hopcroft.cpp │ ├── DominatorTree.cpp │ └── Flow │ │ ├── DinicMaxFlow.cpp │ │ ├── FastDinicMaxFlow.cpp │ │ ├── FordFulkersonFlow.cpp │ │ ├── MCMF.cpp │ │ └── Min_Cost_Max_Flow.cpp ├── HLD_Node_Update.cpp ├── Hash │ ├── HashPalindrome.cpp │ └── HashSubString.cpp ├── Kmp.cpp ├── Kruskal.cpp ├── KthString.cpp ├── LCA_Self.cpp ├── LIS.cpp ├── Lucas.cpp ├── MOalgo.cpp ├── Manachar.cpp ├── MatrixExpo.cpp ├── Miller-Rabin.cpp ├── Mobius.cpp ├── Modular Inverse Using Extended Euclid.cpp ├── MyTemplate.cpp ├── Number Theory │ ├── Chinese Remainder Theorem.cpp │ ├── Miller Rabin.cpp │ ├── Pollard Rho New.cpp │ └── Pollard Rho.cpp ├── Number of Subsequences of length K SPOJ INCSEQ.cpp ├── PolynomialOperations.cpp ├── Polynomial_Multiplication.cpp ├── QuickTrie.cpp ├── SOS DP.cpp ├── Small to Large Trick CF 600E.cpp ├── String Algorithms │ ├── Aho Corrasick.cpp │ ├── AhoWithBIT │ ├── FastAho.cpp │ ├── SuffixArrayWithLCP.cpp │ └── gg.cpp ├── SuffixArray.cpp ├── Tree Dp 766E.cpp ├── Trie+SegTree.cpp ├── Trie.cpp ├── XicoVaiTemplate.cpp └── ZAlgorithm.cpp └── UVA ├── 100 - The 3n + 1 problem.cpp ├── 102 - Ecological Bin Packing.cpp ├── 136 - Ugly Numbers.cpp ├── 151 - Power Crisis.cpp └── 696 - How Many Knights.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Fahim Shahriar Shakkhor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Corona Virus Attacked Kittuk.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | int main() 58 | { 59 | #ifdef VAMP 60 | clock_t tStart = clock(); 61 | freopen("input.txt", "r", stdin); 62 | freopen("output.txt", "w", stdout); 63 | #endif 64 | string str; 65 | cin >> str; 66 | while(str.back() == '0')str.pop_back(); 67 | cout << str << "\n"; 68 | cout << "Stay at Home\n"; 69 | #ifdef VAMP 70 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 71 | #endif 72 | } 73 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Energy Production.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | 58 | double solve(int k,double x,double f,double S) 59 | { 60 | double posx = x; 61 | double totalx = 0; 62 | if(k > 0){ 63 | k--; 64 | posx -= x; 65 | totalx += x; 66 | } 67 | 68 | totalx += S * k; 69 | if(k % 2 == 1)posx = S; 70 | 71 | totalx += ABS(posx - f); 72 | return totalx; 73 | } 74 | 75 | int main() 76 | { 77 | #ifdef VAMP 78 | clock_t tStart = clock(); 79 | freopen("input.txt", "r", stdin); 80 | freopen("output.txt", "w", stdout); 81 | #endif 82 | 83 | int t; 84 | cin >> t; 85 | while(t--){ 86 | int K; 87 | double A , B; 88 | double x1, y1, x2 ,y2; 89 | 90 | cin >> K >> A >> B; 91 | cin >> x1 >> y1 >> x2 >> y2; 92 | 93 | double Ans = 2e18; 94 | for(int k = 0;k <= K;k++){ 95 | double fx = solve(k,x1,x2,A); 96 | double sx = solve(k,A - x1,A - x2,A); 97 | 98 | double fy = solve(K - k,y1,y2,B); 99 | double sy = solve(K - k,B - y1,B - y2,B); 100 | 101 | double X = SQR(min(fx,sx)); 102 | double Y = SQR(min(fy,sy)); 103 | 104 | Ans = min(Ans,sqrt(X + Y)); 105 | } 106 | cout << fixed << setprecision(2) << Ans << "\n"; 107 | 108 | } 109 | #ifdef VAMP 110 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 111 | #endif 112 | } 113 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Hablu Is in Quarantine.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | const int N = 505; 58 | int n; 59 | char str[N][N]; 60 | int main() 61 | { 62 | #ifdef VAMP 63 | clock_t tStart = clock(); 64 | freopen("input.txt", "r", stdin); 65 | freopen("output.txt", "w", stdout); 66 | #endif 67 | 68 | scanf("%d",&n); 69 | REP(i,n)scanf("%s",str[i]); 70 | 71 | int q; 72 | scanf("%d",&q); 73 | 74 | bool ok = 1; 75 | vectorvec; 76 | while(q--){ 77 | int num; 78 | scanf("%d",&num); 79 | num--; 80 | int x = num/n , y = num % n; 81 | if(!ok and str[x][y] == 'a')vec.push_back(num + 1); 82 | 83 | if(str[x][y] == 'c')ok = 0; 84 | } 85 | if(ok){ 86 | cout << "NO\n"; 87 | }else{ 88 | cout << "YES\n"; 89 | for(int i = 0;i < vec.size();i++){ 90 | if(i)cout << " "; 91 | cout << vec[i]; 92 | } 93 | cout << "\n"; 94 | } 95 | #ifdef VAMP 96 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 97 | #endif 98 | } 99 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Hablu's Team.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | const int N = 100005; 58 | int n , k; 59 | int ara[N]; 60 | int main() 61 | { 62 | #ifdef VAMP 63 | clock_t tStart = clock(); 64 | freopen("input.txt", "r", stdin); 65 | freopen("output.txt", "w", stdout); 66 | #endif 67 | cin >> n >> k; 68 | LL cnt = 0; 69 | vectorvec; 70 | for(int i = 1;i <= n;i++){ 71 | cin >> ara[i]; 72 | vec.push_back(ara[i]); 73 | } 74 | SORT(vec); 75 | vectorSET; 76 | LL ans = 0; 77 | for(int i = 0;i < vec.size();i++){ 78 | LL can = k - 1 - vec[i]; 79 | can = max(can,0LL); 80 | int cnt = upper_bound(SET.begin(),SET.end(),can) - SET.begin(); 81 | ans += cnt; 82 | SET.push_back(vec[i]); 83 | } 84 | cout << ans << "\n"; 85 | #ifdef VAMP 86 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 87 | #endif 88 | } 89 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Justify the Invention !.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | int q; 58 | ULL solve(ULL n) 59 | { 60 | ULL cnt = 0; 61 | for(ULL x = 2;x <= n;x = x * 2){ 62 | ULL eq = x - 2; 63 | if(eq % 3 != 0)continue; 64 | eq /= 3; 65 | if(x + eq > n)break; 66 | cnt++; 67 | } 68 | return cnt; 69 | } 70 | int main() 71 | { 72 | #ifdef VAMP 73 | clock_t tStart = clock(); 74 | freopen("input.txt", "r", stdin); 75 | freopen("output.txt", "w", stdout); 76 | #endif 77 | cin >> q; 78 | for(int i = 1;i <= q;i++){ 79 | ULL l , r; 80 | cin >> l >> r; 81 | double ans = solve(r) - solve(l - 1); 82 | double total = r - l + 1; 83 | ans = ans/total; 84 | cout << fixed << setprecision(9) << ans << "\n"; 85 | } 86 | 87 | #ifdef VAMP 88 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 89 | #endif 90 | } 91 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Killing Floor.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | 57 | LL SQRT(LL n) 58 | { 59 | LL sq = sqrt(n); 60 | while(SQR(sq + 1) < n)sq++; 61 | while(SQR(sq) > n)sq--; 62 | return sq; 63 | } 64 | LL n; 65 | int main() 66 | { 67 | #ifdef VAMP 68 | clock_t tStart = clock(); 69 | freopen("input.txt", "r", stdin); 70 | freopen("output.txt", "w", stdout); 71 | #endif 72 | cin >> n; 73 | vectorans; 74 | LL lim = SQRT(n); 75 | 76 | LL ptr = 1; 77 | while(SQR(ptr) <= n){ 78 | ans.push_back(SQR(ptr)); 79 | LL res = n/SQR(ptr); 80 | LL upto = SQRT(n/res); 81 | upto = min(upto,lim); 82 | 83 | ptr = upto + 1; 84 | } 85 | ans.push_back(SQR(lim + 1)); 86 | cout << ans.size() << "\n"; 87 | for(int i = 0;i < ans.size();i++)cout << ans[i] << " "; 88 | 89 | #ifdef VAMP 90 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 91 | #endif 92 | } 93 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Marks Crisis!!!.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | #include 57 | using namespace __gnu_pbds; 58 | template using orderset = tree , rb_tree_tag,tree_order_statistics_node_update>; // find_by_order, order_of_key 59 | 60 | const int N = 100005; 61 | int n , ara[N] , bara[N] , A[N], B[N]; 62 | int pos[N]; 63 | 64 | void doLIS(const vector &S, vector &LIS) 65 | { 66 | vector L(S.size()); 67 | int lisCount = 0; 68 | for (int i = 0; i < S.size(); ++i) 69 | { 70 | int pos = lower_bound(L.begin(), L.begin() + lisCount, S[i]) 71 | - L.begin(); 72 | L[pos] = S[i]; 73 | if (pos == lisCount) 74 | ++lisCount; 75 | 76 | LIS[i] = pos + 1; 77 | } 78 | } 79 | 80 | int main() 81 | { 82 | #ifdef VAMP 83 | clock_t tStart = clock(); 84 | freopen("input.txt", "r", stdin); 85 | freopen("output.txt", "w", stdout); 86 | #endif 87 | cin >> n; 88 | vectorvec; 89 | FOR(i,1,n){ 90 | cin >> ara[i]; 91 | pos[ara[i]] = i; 92 | } 93 | FOR(i,1,n)cin >> bara[i]; 94 | 95 | for(int i = 1;i <= n;i++)A[i] = pos[ara[i]] , B[i] = pos[bara[i]]; 96 | 97 | vectorinc(n); 98 | vectorv(n); 99 | for(int i = 0;i < n;i++)v[i] = B[i + 1]; 100 | doLIS(v,inc); 101 | 102 | int ans = inc.back(); 103 | cout << ans << "\n"; 104 | // for(int i = 1;i <= n;i++)cout << A[i] << " ";cout << endl; 105 | // for(int i = 1;i <= n;i++)cout << B[i] << " ";cout << endl; 106 | 107 | // for(int i : inc)cout << i << " ";cout << endl; 108 | #ifdef VAMP 109 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 110 | #endif 111 | } 112 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BDYP & Duoblogger Home Quarantine Contest/Social Distancing.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 44 | void __f(const char* name, Arg1&& arg1){ 45 | cout << name << " = " << arg1 << std::endl; 46 | } 47 | template < typename Arg1, typename... Args> 48 | void __f(const char* names, Arg1&& arg1, Args&&... args){ 49 | const char* comma = strchr(names+1, ','); 50 | cout.write(names, comma - names) << " = " << arg1 <<" | "; 51 | __f(comma+1, args...); 52 | } 53 | #else 54 | #define debug(...) 55 | #endif 56 | #include 57 | using namespace __gnu_pbds; 58 | template using orderset = tree , rb_tree_tag,tree_order_statistics_node_update>; // find_by_order, order_of_key 59 | 60 | const int N = 100005; 61 | int n , ara[N] , bara[N] , A[N], B[N]; 62 | int pos[N]; 63 | int main() 64 | { 65 | #ifdef VAMP 66 | clock_t tStart = clock(); 67 | freopen("input.txt", "r", stdin); 68 | freopen("output.txt", "w", stdout); 69 | #endif 70 | cin >> n; 71 | vectorvec; 72 | FOR(i,1,n){ 73 | cin >> ara[i]; 74 | pos[ara[i]] = i; 75 | } 76 | FOR(i,1,n)cin >> bara[i]; 77 | 78 | for(int i = 1;i <= n;i++)A[i] = pos[ara[i]] , B[i] = pos[bara[i]]; 79 | 80 | ordersetst; 81 | LL ans = 0; 82 | for(int i = n;i >= 1;i--){ 83 | int cnt = st.order_of_key(B[i]); 84 | ans += cnt; 85 | st.insert(B[i]); 86 | } 87 | cout << ans << "\n"; 88 | 89 | #ifdef VAMP 90 | fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); 91 | #endif 92 | } 93 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Aloyna and CAN buying.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> n >> k; 41 | mapmp; 42 | for(int i = 1;i <= n;i++){ 43 | int c;cin >> c; 44 | mp[c]++; 45 | } 46 | int cnt = 0,num; 47 | for(auto it : mp){ 48 | if(it.second > cnt){ 49 | num = it.first; 50 | cnt = it.second; 51 | } 52 | } 53 | cout << num << "\n"; 54 | } 55 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Beauty of AP.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iprimes; 40 | void siv() 41 | { 42 | int sq = sqrt(N);for(int i =4;i<=N;i+=2)stat[i]=1; 43 | for(int i=3;i<=sq;i+=2)if(!stat[i])for(int j=i*i;j<=N;j+=2*i)stat[j]=1; 44 | FOR(i,2,N)if(!stat[i])primes.pb(i); 45 | } 46 | 47 | vectorop; 48 | LL phi(LL n) 49 | { 50 | op.clear(); 51 | LL M = n; 52 | for(int i = 0;i1){ 63 | op.push_back(n); 64 | M/=n; 65 | M*=(n-1); 66 | } 67 | return M; 68 | } 69 | 70 | LL cnt; 71 | void rec(int pos,LL d,int taken,LL n) 72 | { 73 | if(pos == op.size()){ 74 | if(taken % 2 == 0){ 75 | cnt = cnt + (n/d); 76 | }else{ 77 | cnt = cnt - (n/d); 78 | } 79 | return; 80 | } 81 | rec(pos + 1,d * op[pos],taken + 1,n); 82 | rec(pos + 1,d,taken,n); 83 | } 84 | int main() 85 | { 86 | FastRead 87 | siv(); 88 | int t; 89 | cin >> t; 90 | while(t--){ 91 | LL a , d , n; 92 | cin >> a >> d >> n; 93 | LL howmany = n/d; 94 | LL p = phi(d); 95 | n = n % d; 96 | LL ans = howmany * p; 97 | cnt = 0; 98 | rec(0,1,0,n); 99 | cout << cnt + ans << "\n"; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Building the Number.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i0){if(P%2==1){R=(R*B)%M;}P/=2;B=(B*B)%M;}return R;} 38 | 39 | const LL MOD = 1e9 + 7; 40 | 41 | int main() 42 | { 43 | FastRead 44 | // cout << (BigMod(2,MOD-2,MOD) * 3) % MOD << "\n"; 45 | int t; 46 | cin >> t; 47 | while(t--){ 48 | LL n; 49 | cin >> n; 50 | LL num = BigMod(2,n,MOD);num = (num + MOD) % MOD; 51 | LL sum = (num * (num - 1)) % MOD; 52 | sum = (sum * BigMod(2,MOD-2,MOD)) % MOD; 53 | LL down = BigMod(num,MOD-2,MOD); 54 | sum = (sum * down) % MOD; 55 | sum = (sum + MOD) % MOD; 56 | 57 | cout << sum << "\n"; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Erik and His Buggy Code.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i n){ 48 | printf("0\n"); 49 | return 0; 50 | } 51 | for(int i = 1;i <= n;i++){ 52 | int d = s1[i] - 'a'; 53 | for(int j = 0;j < 26;j++){ 54 | if(j == d)dp[j][i] = dp[j][i - 1] + 1; 55 | else dp[j][i] = dp[j][i - 1]; 56 | } 57 | } 58 | LL ans = 0; 59 | for(int i = 1;i <= m;i++){ 60 | int st = i; 61 | int rest = m - i; 62 | int ed = n - rest; 63 | int d = s2[i] - 'a'; 64 | int mil = dp[d][ed] - dp[d][st - 1]; 65 | int omil = ed - st + 1 - mil; 66 | ans += omil; 67 | } 68 | printf("%lld\n",ans); 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Hardest Problem Ever.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> t; 43 | while(t--){ 44 | cin >> a >> b >> c >> l >> r; 45 | r = r - c; 46 | l = l - c; 47 | LL lo = 1, hi = 1e9, mid,ans1 = 0; 48 | 49 | while(lo <= hi){ 50 | mid = (lo + hi)/2; 51 | LL g = mid * mid * a + b * mid; 52 | if(g <= r){ 53 | ans1 = mid; 54 | lo = mid + 1; 55 | }else{ 56 | hi = mid - 1; 57 | } 58 | } 59 | lo = 1, hi = 1e9; 60 | LL ans2 = 0; 61 | while(lo <= hi){ 62 | mid = (lo + hi)/2; 63 | LL g = mid * mid * a + b * mid; 64 | // cout << g << " " << l << "\n"; 65 | if(g < l){ 66 | ans2 = mid; 67 | lo = mid + 1; 68 | }else{ 69 | hi = mid - 1; 70 | } 71 | } 72 | cout << ans1 - ans2 << "\n"; 73 | // cout << ans1 << " " << ans2 << "\n"; 74 | 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Mad Engineer Aksir.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> n >> q; 43 | while(q--){ 44 | int l , r; 45 | cin >> l >> r; 46 | g[l]++; 47 | g[r + 1]--; 48 | } 49 | int s = 0; 50 | for(int i = 1;i <= n;i++){ 51 | s = s + g[i]; 52 | ara[i] = s % 2; 53 | } 54 | for(int i = 1;i <= n;i++){ 55 | if(i > 1)cout << " "; 56 | cout << ara[i]; 57 | } 58 | cout << "\n"; 59 | } 60 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Memes vs. Social Media.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i v)swap(u,v); 56 | if(u == v)continue; 57 | pr[v] = u; 58 | seg[u] += seg[v]; 59 | } 60 | vectorvec; 61 | for(int i = 1;i <= n;i++){ 62 | if(find(i) == i){ 63 | vec.push_back(mk(seg[i],i)); 64 | } 65 | } 66 | FOR(i,1,n)dp[i] = 1e9; 67 | for(int i = 0;i < vec.size();i++){ 68 | int cost = vec[i].second; 69 | int val = vec[i].first; 70 | // cout << "v c : " << cost << " " << val << "\n"; 71 | for(int j = n;j >= val;j--){ 72 | dp[j] = min(dp[j],cost + dp[j - val]); 73 | // cout << j << " " << dp[j] << "\n"; 74 | } 75 | } 76 | int ans = 1e9; 77 | for(int i = k;i <= n;i++)ans = min(ans,dp[i]); 78 | cout << ans << "\n"; 79 | } 80 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Palindromic Naming Convention.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i= 1;i--)printf("%c",in[i]); 71 | printf("\n"); 72 | } 73 | int main() 74 | { 75 | int t; 76 | scanf("%d",&t); 77 | while(t--){ 78 | solve(); 79 | } 80 | return 0; 81 | } 82 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Poltu and Graph.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i>edge; 42 | int ans[N],pr[N],seg[N]; 43 | 44 | int find(int r) 45 | { 46 | if(pr[r] == r)return r; 47 | else return pr[r] = find(pr[r]); 48 | } 49 | int main() 50 | { 51 | scanf("%d %d",&n,&m); 52 | FOR(i,1,n)pr[i] = i,seg[i] = 1; 53 | 54 | for(int i = 1;i <= m;i++){ 55 | int u , v , w; 56 | scanf("%d %d %d",&u,&v,&w); 57 | edge.push_back(mk(w,mk(u,v))); 58 | } 59 | 60 | scanf("%d",&q); 61 | deque>que; 62 | for(int i = 1;i <= q;i++){ 63 | int node , x; 64 | scanf("%d %d",&node,&x); 65 | que.push_back(mk(x,mk(node,i))); 66 | } 67 | SORT(que); 68 | SORT(edge); 69 | 70 | /* 71 | 5 1 72 | 1 2 3 73 | 4 74 | 1 7 75 | 1 5 76 | 1 3 77 | 4 5 78 | 79 | */ 80 | for(int i = 0;i < que.size();i++){ 81 | int x = que[i].first; 82 | // cout << "x : " << x << "\n"; 83 | 84 | while(edge.size() > 0 and edge[0].first <= x){ 85 | int u = edge[0].ss.ff; 86 | int v = edge[0].ss.ss; 87 | edge.pop_front(); 88 | u = find(u); 89 | v = find(v); 90 | if(u == v)continue; 91 | seg[u] += seg[v]; 92 | pr[v] = u; 93 | } 94 | // for(int j = 1;j <= n;j++)cout << find(j) << " ";cout << "\n"; 95 | // for(int j = 1;j <= n;j++)cout << seg[find(j)] << " ";cout << "\n"; 96 | ans[que[i].ss.ss] = seg[find(que[i].ss.ff)]; 97 | } 98 | for(int i = 1;i <= q;i++){ 99 | printf("%d\n",ans[i]); 100 | } 101 | 102 | } 103 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Poltu and Interesting Number.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 0){ 46 | s += char('0' + n % 10); 47 | n/=10; 48 | } 49 | while(s.size() < 15)s += "0"; 50 | REV(s); 51 | return s; 52 | } 53 | LL call(int pos,int pre,int tight,int ff) 54 | { 55 | 56 | if(pos == str.size())return ff == 0; 57 | if(tight == 0 and vis[pos][pre][tight][ff] > 0)return dp[pos][pre][tight][ff]; 58 | if(vis[pos][pre][tight][ff] == visId)return dp[pos][pre][tight][ff]; 59 | vis[pos][pre][tight][ff] = visId; 60 | 61 | int lo = 0 , hi = 9; 62 | if(tight == 1)hi = str[pos] - '0'; 63 | if(ff == 0)lo = 1; 64 | 65 | LL ret = 0; 66 | for(int i = lo;i <= hi;i++){ 67 | if(i == pre){ 68 | if(i != 0)continue; 69 | } 70 | int newtight = tight; 71 | if(i != hi)newtight = 0; 72 | ret = ret + call(pos + 1,i,newtight,(ff && (i == 0))); 73 | } 74 | return dp[pos][pre][tight][ff] = ret; 75 | 76 | } 77 | int main() 78 | { 79 | FastRead 80 | int t,cases = 0; 81 | cin >> t; 82 | 83 | while(t--){ 84 | LL n; 85 | cin >> n; 86 | LL lo = 1, hi = 1e14 , mid,ans; 87 | 88 | while(lo <= hi){ 89 | mid = (lo + hi)/2; 90 | str = gen(mid); 91 | visId++; 92 | LL got = call(0,0,1,1); 93 | if(got >= n){ 94 | ans = mid; 95 | hi = mid - 1; 96 | }else{ 97 | lo = mid + 1; 98 | } 99 | } 100 | cout << "Case " << ++cases << ": " << ans << "\n"; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/BSMRSTU Intra University Programming Contest 2019/Poltu and Odd Number.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> t; 46 | while(t--){ 47 | LL l , r; 48 | cin >> l >> r; 49 | cout << "Case " << ++cases << ": " << solve(r) - solve(l - 1) << "\n"; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Arshiya's First Code.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() { 6 | long long n; 7 | cin >> n; 8 | cout << (n + 1)/2 << "\n"; 9 | return 0; 10 | } 11 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Déjà Vu.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI 2 * acos(0.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;ist; 47 | FOR(i,1,n)st.insert(ara[i]); 48 | int ans = 0; 49 | while(st.size() > 0){ 50 | ans++; 51 | int Last = *(--st.end()); 52 | st.erase(--st.end()); 53 | while(st.size() > 0){ 54 | int V = *(--st.end()); 55 | if(ABS(V - Last) <= r){ 56 | st.erase(--st.end()); 57 | if(V - r > 0)st.insert(V - r); 58 | } 59 | else break; 60 | } 61 | } 62 | cout << ans << "\n"; 63 | 64 | } 65 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Expected Result.cpp: -------------------------------------------------------------------------------- 1 | include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> t; 56 | while(t--){ 57 | int n,k; 58 | cin >> n >> k; 59 | cout << fixed << setprecision(9) << call(n,k) << "\n"; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Messy Table.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;ig[N]; 39 | int dp[N][N]; 40 | int call(int x,int y) 41 | { 42 | if(dp[x][y] != -1)return dp[x][y]; 43 | int ret = 0; 44 | for(int i = x + 1;i <= 100;i++){ 45 | auto it = upper_bound(g[i].begin(),g[i].end(),y); 46 | if(it != g[i].end() and *it > y){ 47 | ret = max(ret,1 + call(i,*it)); 48 | } 49 | } 50 | for(int i = y + 1;i <= 100;i++){ 51 | auto it = upper_bound(g[i].begin(),g[i].end(),x); 52 | if(it != g[i].end() and *it > x){ 53 | ret = max(ret,1 + call(*it,i)); 54 | } 55 | } 56 | return dp[x][y] = ret; 57 | } 58 | int main() 59 | { 60 | FastRead 61 | MEM(dp,-1); 62 | int n; 63 | cin >> n; 64 | FOR(i,1,n) 65 | { 66 | int x,y; 67 | cin >> x >> y; 68 | assert(x >= 1 and y >= 1 and x <= 100 and y <= 100); 69 | g[x].insert(y); 70 | g[y].insert(x); 71 | } 72 | cout << call(0,0) << "\n"; 73 | 74 | } 75 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Modulo.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iQ; 47 | FOR(i,1,n){ 48 | scanf("%lld",&ara[i]); 49 | Q.push(mk(ara[i],i)); 50 | } 51 | LL q; 52 | scanf("%lld",&q); 53 | 54 | while(q--){ 55 | LL m; 56 | scanf("%lld",&m); 57 | 58 | while(1){ 59 | pll P = Q.top(); 60 | if(P.first < m)break; 61 | Q.pop(); 62 | Q.push(mk(P.first % m,P.second)); 63 | } 64 | } 65 | while(!Q.empty()){ 66 | pll P = Q.top(); 67 | ara[P.second] = P.first; 68 | Q.pop(); 69 | } 70 | printf("Case %lld:\n",++cases); 71 | for(int i = 1;i <= n;i++){ 72 | if(i > 1)printf(" "); 73 | printf("%lld",ara[i]); 74 | } 75 | printf("\n"); 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Palindrome Again.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;imp; 37 | string X[] = { EMPTY, "One ", "Two ", "Three ", "Four ", "Five ", 38 | "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ", 39 | "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", 40 | "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen " }; 41 | 42 | string Y[] = { EMPTY, EMPTY, "Twenty ", "Thirty ", "Forty ", "Fifty ", 43 | "Sixty ", "Seventy ", "Eighty ", "Ninety " }; 44 | 45 | 46 | void TOLOWER(string &s) 47 | { 48 | while(s.size() > 0 and s.back() == ' ')s.pop_back(); 49 | for(int i = 0;i < s.size();i++)s[i] = tolower(s[i]); 50 | } 51 | void preprocess() 52 | { 53 | for(int i = 0;i <= 19;i++)TOLOWER(X[i]); 54 | for(int i = 0;i <= 9;i++)TOLOWER(Y[i]); 55 | 56 | for(int i = 0;i <= 9;i++)mp[Y[i]] = i * 10; 57 | for(int i = 0;i <= 19;i++)mp[X[i]] = i; 58 | 59 | } 60 | void make(string str,vector&vec) 61 | { 62 | string temp; 63 | for(int i = 0;i < str.size();i++){ 64 | if(str[i] == ' '){ 65 | vec.push_back(temp); 66 | temp.clear(); 67 | }else{ 68 | temp += str[i]; 69 | } 70 | } 71 | vec.push_back(temp); 72 | } 73 | 74 | int main() 75 | { 76 | preprocess(); 77 | 78 | int t; 79 | cin >> t; 80 | cin.ignore(); 81 | while(t--){ 82 | string str; 83 | getline(cin,str); 84 | vectorvec; 85 | make(str,vec); 86 | 87 | int ans = 0; 88 | int done = -1; 89 | for(int i = 0;i < vec.size();i++){ 90 | if(vec[i] == "thousand"){ 91 | int v = mp[vec[i - 1]]; 92 | ans = ans + v * 1000; 93 | done = i; 94 | } 95 | if(vec[i] == "hundred"){ 96 | int v = mp[vec[i - 1]]; 97 | ans = ans + v * 100; 98 | done = i; 99 | } 100 | } 101 | for(int i = done + 1;i < vec.size();i++){ 102 | ans = ans + mp[vec[i]]; 103 | } 104 | vectorbin; 105 | while(ans > 0){ 106 | bin.push_back(ans % 2); 107 | ans/=2; 108 | } 109 | vectorrev = bin; 110 | REV(rev); 111 | if(bin == rev)cout << "YES\n"; 112 | else cout << "NO\n"; 113 | 114 | } 115 | 116 | } 117 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/The Archipelago of Mirpur.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1e9 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iedge; 44 | bool cmp(DATA a,DATA b) 45 | { 46 | return a.w < b.w; 47 | } 48 | double ans[N]; 49 | int pr[N]; 50 | 51 | int find(int r) 52 | { 53 | if(pr[r] == r)return r; 54 | else return pr[r] = find(pr[r]); 55 | } 56 | int main() 57 | { 58 | cin >> n; 59 | FOR(i,1,n)cin >> X[i] >> Y[i]; 60 | FOR(i,1,n)pr[i] = i; 61 | for(int i = 1;i <= n;i++) 62 | { 63 | for(int j = i + 1;j <= n;j++) 64 | { 65 | edge.push_back({i,j,SQR(X[i] - X[j]) + SQR(Y[i] - Y[j])}); 66 | } 67 | } 68 | sort(edge.begin(),edge.end(),cmp); 69 | 70 | vectorQ; 71 | cin >> q; 72 | FOR(i,1,q) 73 | { 74 | int w;cin >> w; 75 | Q.push_back(mk(w,i)); 76 | } 77 | SORT(Q); 78 | REV(Q); 79 | 80 | int ptr = 0; 81 | int kingdom = n; 82 | int cur = 0; 83 | for(int i = 0;i < Q.size();i++){ 84 | while(kingdom > Q[i].first){ 85 | int u = edge[ptr].u; 86 | int v = edge[ptr].v; 87 | int w = edge[ptr].w; 88 | u = find(u); 89 | v = find(v); 90 | ptr = ptr + 1; 91 | if(u == v)continue; 92 | kingdom--; 93 | pr[v] = u; 94 | cur = w; 95 | } 96 | ans[Q[i].second] = cur; 97 | } 98 | for(int i = 1;i <= q;i++){ 99 | cout << fixed << setprecision(9) << sqrt(ans[i]) << "\n"; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /Online Judge Solve/Toph/National Girls' Programming Contest 2019 Preliminary/Weird Cake.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI 2 * acos(0.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> H >> h1 >> h2){ 46 | h1 = H - h1; 47 | h2 = H - h2; 48 | long double R = H/2.0; 49 | 50 | long double x = area(R,h1); 51 | 52 | long double y = area(R,h2); 53 | long double z = area(R,2 * R); 54 | vectorvec; 55 | vec.push_back(x); 56 | vec.push_back(y - x); 57 | vec.push_back(z - y); 58 | 59 | sort(vec.begin(),vec.end()); 60 | 61 | cout << fixed << setprecision(6) << vec[0] << " " << vec[1] << " " << vec[2] << "\n"; 62 | } 63 | 64 | 65 | } 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # competitive-programming 2 | 3 | ### [Click Here](https://github.com/fsshakkhor/competitive-programming/tree/master/Template%20Codes) 4 | -------------------------------------------------------------------------------- /Resources/BlogList.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Blog Lists: 4 | 5 | ## Useful Websites: 6 | 7 | http://www.shafaetsplanet.com/ (For Beginners) 8 | 9 | https://cp-algorithms.com/ 10 | 11 | https://petr-mitrichev.blogspot.com/ 12 | 13 | https://www.hackerearth.com/blog/algorithms/ 14 | 15 | http://zobayer.blogspot.com/ 16 | 17 | http://www.mathblog.dk/ 18 | 19 | https://www.codechef.com/certification/data-structures-and-algorithms/prepare 20 | 21 | ## Segment Tree: 22 | https://codeforces.com/blog/entry/22616 (Problem List) 23 | 24 | ## Square Root Decomposition: 25 | https://codeforces.com/blog/entry/23005 (Problem List) 26 | 27 | ## Dynamic Programming: 28 | https://codeforces.com/blog/entry/47764 (Dp Tricks) 29 | 30 | https://codeforces.com/blog/entry/325 (Problem List) 31 | 32 | https://codeforces.com/blog/entry/20935 (Dp On Trees) 33 | 34 | https://codeforces.com/blog/entry/45223 (Sum over Subset Dp) 35 | 36 | https://codeforces.com/blog/entry/47932 (Dp Optimization Techniques) 37 | 38 | ## Number Theory Problem List: 39 | https://codeforces.com/blog/entry/49494 40 | 41 | ## Graph: 42 | https://codeforces.com/blog/entry/16221 (Almost all graph related topics) 43 | 44 | ## Data Structures: 45 | https://codeforces.com/blog/entry/15729 (Almost all data structures) 46 | 47 | # Hash 48 | http://codeforces.com/blog/entry/60445 49 | 50 | http://codeforces.com/blog/entry/60442 51 | 52 | ## DSU On Tree: 53 | https://codeforces.com/blog/entry/44351 (Idea and Implementation) 54 | 55 | ## MO Algorithm: 56 | https://blog.anudeep2011.com/mos-algorithm/ (Idea and Implementation) 57 | 58 | https://codeforces.com/blog/entry/43230 (MO on path) 59 | 60 | ## Heavy Light Decomposition: 61 | https://blog.anudeep2011.com/heavy-light-decomposition/ (Idea and Implementation) 62 | 63 | 64 | ## Persistent Segment Tree: 65 | https://blog.anudeep2011.com/persistent-segment-trees-explained-with-spoj-problems/ (Idea) 66 | 67 | ## Interactive Problems: 68 | https://codeforces.com/blog/entry/60533 (Problem List) 69 | 70 | ## Miscellaneous: 71 | https://codeforces.com/blog/entry/48417 (General Ideas) 72 | 73 | https://codeforces.com/blog/entry/23204 (Topic Wise Resources) 74 | 75 | https://codeforces.com/blog/entry/55274 (Huge List of Topic wise Problems) 76 | 77 | -------------------------------------------------------------------------------- /Template Codes/2D_Range_Minimum_Query.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> n >> m >> a >> b; 48 | cin >> g[0] >> x >> y >> z; 49 | for(int i = 1;i <= n * m;i++)g[i] = (g[i-1] * x + y) % z; 50 | for(int i = 1;i <= n;i++){ 51 | for(int j = 1;j <= m;j++){ 52 | ara[i - 1][j - 1] = -g[(i-1)*m+j-1]; 53 | } 54 | } 55 | 56 | deque q; 57 | for (int i = 0; i < n; ++i) { 58 | q.clear(); 59 | 60 | int j; 61 | for (j = 0; j < b; ++j) { 62 | while (!q.empty() && ara[i][j] >= ara[i][q.back()]) { 63 | //cout << "a: " << i << ' ' << j << ' ' << ara[i][j] << '\n'; 64 | q.pop_back(); 65 | } 66 | q.push_back(j); 67 | } 68 | 69 | for ( ; j < m; ++j) { 70 | Rows[i][j-b] = ara[i][q.front()]; 71 | 72 | while (!q.empty() && q.front() <= j - b) { 73 | q.pop_front(); 74 | } 75 | 76 | while (!q.empty() && ara[i][j] >= ara[i][q.back()]) { 77 | q.pop_back(); 78 | } 79 | q.push_back(j); 80 | } 81 | Rows[i][j-b] = ara[i][q.front()]; 82 | } 83 | for (int j = 0; j + b - 1 < m; ++j) { 84 | q.clear(); 85 | 86 | int i; 87 | for (i = 0; i < a; ++i) { 88 | while (!q.empty() && Rows[i][j] >= Rows[q.back()][j]) { 89 | q.pop_back(); 90 | } 91 | q.push_back(i); 92 | } 93 | 94 | for ( ; i < n; ++i) { 95 | Cols[i-a][j] = Rows[q.front()][j]; 96 | 97 | while (!q.empty() && q.front() <= i - a) { 98 | q.pop_front(); 99 | } 100 | 101 | while (!q.empty() && Rows[i][j] >= Rows[q.back()][j]) { 102 | q.pop_back(); 103 | } 104 | q.push_back(i); 105 | } 106 | Cols[i-a][j] = Rows[q.front()][j]; 107 | } 108 | LL ans = 0; 109 | // cout << a << " " << b << "\n"; 110 | for (int i = 0; i + a - 1 < n; ++i) { 111 | for (int j = 0; j + b - 1 < m; ++j) { 112 | ans += -Cols[i][j]; 113 | // cout << -Cols[i][j] << " "; 114 | } 115 | // cout << "\n"; 116 | } 117 | cout << ans << "\n"; 118 | 119 | } 120 | -------------------------------------------------------------------------------- /Template Codes/Anti_Frustration_Template.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i= 0; e = Prev[e]) { 70 | int u2 = matching[head[e]]; 71 | if (u2 >= 0 && dist[u2] < 0) { 72 | dist[u2] = dist[u1] + 1; 73 | Q[sizeQ++] = u2; 74 | } 75 | } 76 | } 77 | } 78 | 79 | bool dfs(int u1) { 80 | vis[u1] = true; 81 | for (int e = last[u1]; e >= 0; e = Prev[e]) { 82 | int v = head[e]; 83 | int u2 = matching[v]; 84 | if (u2 < 0 || !vis[u2] && dist[u2] == dist[u1] + 1 && dfs(u2)) { 85 | matching[v] = u1; 86 | used[u1] = true; 87 | return true; 88 | } 89 | } 90 | return false; 91 | } 92 | 93 | int maxMatching() { 94 | fill(used, used + n1, false); 95 | fill(matching, matching + n2, -1); 96 | for (int res = 0;;) { 97 | bfs(); 98 | fill(vis, vis + n1, false); 99 | int f = 0; 100 | for (int u = 0; u < n1; ++u) 101 | if (!used[u] && dfs(u)) 102 | ++f; 103 | if (!f) 104 | return res; 105 | res += f; 106 | } 107 | } 108 | pair ara[75005]; 109 | int main() 110 | { 111 | FastRead 112 | int m,n,k; 113 | cin >> m >> n >> k; 114 | for(int i = 0;i < k;i++){ 115 | cin >> ara[i].first >> ara[i].second; 116 | ara[i].first--; 117 | ara[i].second--; 118 | } 119 | int Ans = 0; 120 | for(int j = 1;j <= m;j++){ 121 | init(m + 2,n); 122 | for(int i = 0;i < k;i++){ 123 | addEdge(ara[i].first,ara[i].second); 124 | if(ara[i].first == j){ 125 | addEdge(m,ara[i].second); 126 | addEdge(m + 1,ara[i].second); 127 | } 128 | } 129 | Ans = max(Ans,maxMatching()); 130 | } 131 | cout << Ans << "\n"; 132 | 133 | } 134 | -------------------------------------------------------------------------------- /Template Codes/BPM.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iG[N]; 40 | 41 | bool dfs(int u) 42 | { 43 | for(int i = 0;i < G[u].size();i++){ 44 | int v = G[u][i]; 45 | if(vis[v])continue; 46 | vis[v] = 1; 47 | if(matchR[v] == 0 || dfs(matchR[v])){ 48 | matchR[v] = u; 49 | return true; 50 | } 51 | } 52 | return false; 53 | } 54 | int main() 55 | { 56 | FastRead 57 | int m,n,k; 58 | cin >> m >> n >> k; 59 | for(int i = 0;i < k;i++){ 60 | int a,b; 61 | cin >> a >> b; 62 | G[a].pb(b); 63 | } 64 | int Ans = 0, Extra = 0; 65 | for(int i = 1;i <= m;i++){ 66 | MEM(vis,0); 67 | if(dfs(i))Ans++; 68 | } 69 | for(int i = 1;i <= n;i++)store[i] = matchR[i]; 70 | 71 | for(int i = 1;i <= m;i++){ 72 | int temp = 0; 73 | for(int j = 1;j <= n;j++)matchR[j] = store[j]; 74 | MEM(vis,0); 75 | temp += dfs(i); 76 | 77 | MEM(vis,0); 78 | temp += dfs(i); 79 | 80 | Extra = max(Extra,temp); 81 | if(Extra == 2)break; 82 | } 83 | cout << Ans + Extra << "\n"; 84 | 85 | } 86 | -------------------------------------------------------------------------------- /Template Codes/BackTrack/Gym100110A.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i ans){ 45 | ans = sz; 46 | for(int i = 0;i < ans;i++)Ans[i] = ara[i]; 47 | } 48 | if(sz + n - pos + 1 <= ans)return; 49 | if(Maximum[n - pos + 1] + sz <= ans)return; 50 | if(pos == n + 1)return; 51 | if(mark[pos] == 0){ 52 | 53 | for(int i = sz-1;i >=0;i--){ 54 | int d = pos - ara[i]; 55 | int ele = pos + 2 * d; 56 | if(ele > n)break; 57 | mark[ele]++; 58 | } 59 | ara[sz++] = pos; 60 | rec(pos + 1); 61 | sz--; 62 | for(int i = sz-1;i >=0;i--){ 63 | int d = pos - ara[i]; 64 | int ele = pos + (d << 1); 65 | if(ele > n)break; 66 | mark[ele]--; 67 | } 68 | } 69 | rec(pos + 1); 70 | } 71 | int main() 72 | { 73 | fRead("art.in"); 74 | fWrite("art.out"); 75 | const clock_t begin_time = clock(); 76 | for(int i = 1;i <= 70;i++)Maximum[i] = 100; 77 | int X; 78 | cin >> X; 79 | for(n = 1;n <= X;n++){ 80 | rec(1); 81 | 82 | Maximum[n] = ans; 83 | } 84 | cout << ans << "\n"; 85 | for(int i = 0;i < ans;i++) 86 | { 87 | if(i)cout << " "; 88 | cout << Ans[i]; 89 | }cout << "\n"; 90 | // cout << float( clock () - begin_time ) / CLOCKS_PER_SEC << endl; 91 | 92 | } 93 | -------------------------------------------------------------------------------- /Template Codes/Bridge.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iG[N+5]; 49 | bool vis[N+5]; 50 | int discover[N+5]; 51 | int low[N+5]; 52 | int pr[N+5]; 53 | vectorbr; 54 | void dfs(int u) 55 | { 56 | static int time = 0; 57 | vis[u] = 1; 58 | discover[u] = low[u] = ++time; 59 | 60 | for(int v : G[u]){ 61 | if(!vis[v]){ 62 | pr[v] = u; 63 | dfs(v); 64 | low[u] = min(low[u],low[v]); 65 | if(low[v]>discover[u]){ 66 | br.pb(mk(u,v)); 67 | } 68 | } 69 | else if(pr[u]!=v){ 70 | low[u] = min(low[u],discover[v]); 71 | } 72 | } 73 | } 74 | 75 | int main() 76 | { 77 | MEM(pr,-1); 78 | int n,m; 79 | cin >> n >> m; 80 | for(int i = 0;i> a >> b; 83 | G[a].pb(b); 84 | G[b].pb(a); 85 | } 86 | for(int i = 1;i<=n;i++){ 87 | if(!vis[i])dfs(i); 88 | } 89 | for(int i = 0;i 2 | using namespace std; 3 | typedef long long ll; 4 | const int maxn = 1e5+10; 5 | set adj[maxn]; 6 | int n, sub[maxn]; 7 | char col[maxn]; 8 | 9 | void dfs(int u, int par) { 10 | sub[u] = 1; 11 | for(int v : adj[u]) if(par - v) { 12 | dfs(v, u); sub[u] += sub[v]; 13 | } 14 | } 15 | int centroid(int u, int par, int sz) { 16 | for(int v : adj[u]) if(par - v) 17 | if(sub[v] > sz) 18 | return centroid(v, u, sz); 19 | return u; 20 | } 21 | void decompose(int u, int par, char rank) { 22 | dfs(u, -1); 23 | int c = centroid(u, -1, sub[u] / 2); 24 | col[c] = rank; 25 | for(int v : adj[c]) { 26 | adj[v].erase(c); 27 | decompose(v, c, rank+1); 28 | } 29 | } 30 | int main () { 31 | cin>>n; 32 | for(int i=0; i>u>>v; 34 | u--, v--; 35 | adj[u].insert(v); 36 | adj[v].insert(u); 37 | } 38 | decompose(0, -1, 'A'); 39 | for(int i=0; i 2 | #define SQR(a) ((a)*(a)) 3 | using namespace std; 4 | #define LL long long 5 | 6 | const LL inf = (LL)1e18; 7 | 8 | struct point { 9 | LL x, y; 10 | int id; 11 | point() {} 12 | point (LL a, LL b) : x(a), y(b) {} 13 | }; 14 | 15 | LL dist(point p1,point p2) 16 | { 17 | return (SQR(p1.x - p2.x) + SQR(p1.y - p2.y)); 18 | } 19 | vectorvp; 20 | LL closest(int L, int R ) { 21 | if( L == R ) return inf; 22 | if( L + 1 == R ) return dist( vp[L], vp[R] ); 23 | int mid = ( L + R ) / 2; 24 | LL d = min( closest( L, mid ), closest( mid + 1, R ) ); 25 | vector < int > br; 26 | for( int i=L; i<=R; i++ ) { 27 | if( SQR( vp[mid].x - vp[i].x ) <= d ) br.push_back( i ); 28 | } 29 | sort( br.begin(), br.end(), []( const int& a, const int& b ) -> bool { 30 | return vp[a].y < vp[b].y; 31 | } ); 32 | for( int i=0; i<(int)(br.size()); i++ ) { 33 | for( int j=i+1; j<(int)(br.size()) && j - i <= 7; j++ ) { 34 | d = min( d, dist( vp[br[i]], vp[br[j]] ) ); 35 | } 36 | } 37 | return d; 38 | } 39 | 40 | const LL N = 100005; 41 | LL n,ara[N],cum[N]; 42 | int main() 43 | { 44 | cin >> n; 45 | for(LL i = 0;i < n;i++)cin >> ara[i]; 46 | LL s = 0; 47 | 48 | for(LL i = 0;i < n;i++)s = s + ara[i],cum[i] = s; 49 | for(LL i = 0;i < n;i++)vp.push_back({i,cum[i]}); 50 | LL ans = closest(0,n - 1); 51 | cout << ans << "\n"; 52 | } 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Template Codes/CycleCheckDirectedGraph.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | 17 | #define min3(a,b,c) min(a,min(b,c)) 18 | #define max3(a,b,c) max(a,max(b,c)) 19 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 20 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 21 | #define SQR(a) ((a)*(a)) 22 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 23 | #define REP(i,b) for(int i=0;i=b;i--) 25 | #define MEM(a,x) memset(a,x,sizeof(a)) 26 | #define ABS(x) ((x)<0?-(x):(x)) 27 | 28 | #define scanI(a) scanf("%d",&a) 29 | #define scanI2(a,b) scanI(a) , scanI(b) 30 | #define scanI3(a,b,c) scanI(a), scanI(b), scanI(c) 31 | #define scanI4(a,b,c,d) scanI(a), scanI(b), scanI(c), scanI(d) 32 | 33 | #define scanL(a) scanf("%I64d",&a) 34 | #define scanL2(a,b) scanL(a) , scanL(b) 35 | #define scanL3(a,b,c) scanL(a), scanL(b), scanL(c) 36 | #define scanL4(a,b,c,d) scanL(a), scanL(b), scanL(c), scanL(d) 37 | 38 | #define SORT(v) sort(v.begin(),v.end()) 39 | #define REV(v) reverse(v.begin(),v.end()) 40 | 41 | #define FastRead ios_base::sync_with_stdio(0);cin.tie(nullptr); 42 | const int N = 300001; 43 | vectorG[N]; 44 | char str[N]; 45 | int ara[N],dp[N]; 46 | int vis[N],mark[N]; 47 | int n,m; 48 | 49 | stackst; 50 | void topological(int node) 51 | { 52 | if(vis[node])return; 53 | vis[node] = 1; 54 | for(int i : G[node]){ 55 | topological(i); 56 | } 57 | st.push(node); 58 | } 59 | void dfs(int node) 60 | { 61 | vis[node] = 1; 62 | for(int i : G[node]){ 63 | if(vis[i] == 2)continue; 64 | if(vis[i] == 1){ 65 | cout << -1 << "\n"; 66 | exit(0); 67 | } 68 | dfs(i); 69 | } 70 | vis[node] = 2 ; 71 | } 72 | int call(int node) 73 | { 74 | if(dp[node] != -1)return dp[node]; 75 | int ret = ara[node]; 76 | for(int i : G[node]){ 77 | ret = max(ret,ara[node] + call(i)); 78 | } 79 | return dp[node] = ret; 80 | } 81 | int main() 82 | { 83 | scanf("%d %d",&n,&m); 84 | scanf("%s",str); 85 | for(int i = 1;i <= m;i++){ 86 | int a,b; 87 | scanf("%d %d",&a,&b); 88 | G[a].pb(b); 89 | } 90 | for(int i = 1;i <= n;i++)topological(i); 91 | MEM(vis,0); 92 | for(int i = 1;i <= n;i++){ 93 | if(vis[i] == 0)dfs(i); 94 | } 95 | int ans = 0; 96 | for(int ch = 0;ch < 26;ch++){ 97 | MEM(ara,0);MEM(dp,-1); 98 | for(int i = 0;i < n;i++){ 99 | if(str[i] - 'a' == ch){ 100 | ara[i + 1] = 1; 101 | } 102 | } 103 | // for(int i = 1;i <= n;i++)cout << ara[i] << " ";cout << endl; 104 | for(int i = 1;i <= n;i++)ans = max(ans,call(i)); 105 | } 106 | printf("%d\n",ans); 107 | } 108 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/BIT/BIT.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i1;r--){ 64 | update(r,x+1,query(r-1,x)); 65 | } 66 | update(1,x+1,1); 67 | } 68 | printf("%lld\n",query(k,N)); 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/BIT/BIT_2D.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define LL long long 3 | using namespace std; 4 | const int N = 1050; 5 | LL n,m,q; 6 | LL bit[1100][1100]; 7 | LL ara[1100][1100]; 8 | void update(LL x,LL y,LL val) 9 | { 10 | while(x <= N) 11 | { 12 | LL y1 = y; 13 | while(y1 <= N){ 14 | bit[x][y1] += val; 15 | y1+=(y1&-y1); 16 | } 17 | x+=(x&-x); 18 | } 19 | } 20 | LL query(LL x,LL y) 21 | { 22 | LL ret = 0; 23 | while(x > 0) 24 | { 25 | LL y1 = y; 26 | while(y1 > 0) 27 | { 28 | ret += (LL)bit[x][y1]; 29 | y1-=(y1&-y1); 30 | } 31 | x-=(x&-x); 32 | } 33 | return ret; 34 | } 35 | int main() 36 | { 37 | ios_base::sync_with_stdio(false); 38 | cin.tie(nullptr); 39 | int t; 40 | cin >> t; 41 | 42 | while(t--) 43 | { 44 | memset(bit,0,sizeof(bit)); 45 | memset(ara,0,sizeof(ara)); 46 | int q; 47 | cin >> q; 48 | while(1) 49 | { 50 | string s; 51 | cin >> s; 52 | if(s[0] == 'E')break; 53 | if(s[1] == 'E'){ 54 | LL x,y,num; 55 | cin >> x >> y >> num; 56 | x++;y++; 57 | update(x,y,num - ara[x][y]); 58 | ara[x][y] = num; 59 | }else{ 60 | LL x1,y1,x2,y2; 61 | cin >> x1>> y1 >> x2 >> y2; 62 | x1++;y1++;x2++;y2++; 63 | LL answer = query(x2,y2) - query(x2,y1-1) - query(x1-1,y2) + query(x1-1,y1-1); 64 | cout << answer << "\n"; 65 | } 66 | } 67 | cout << "\n"; 68 | } 69 | 70 | 71 | } 72 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/BIT/BIT_2D_Range.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | using namespace std; 5 | int n; 6 | long long int BIT[2][2][1025][1025]; 7 | 8 | void update(int x,int y,long long int value){ 9 | int xx=x; 10 | while(xx<=n){ 11 | int yy=y; 12 | while(yy<=n){ 13 | BIT[x%2][y%2][xx][yy]^=value; 14 | yy+=(yy&-yy); 15 | } 16 | xx+=(xx&-xx); 17 | } 18 | } 19 | 20 | long long int sum(int x,int y){ 21 | long long int ans=0; 22 | int xx=x; 23 | while(xx!=0){ 24 | int yy=y; 25 | while(yy!=0){ 26 | ans^=BIT[x%2][y%2][xx][yy]; 27 | yy-=(yy&-yy); 28 | } 29 | xx-=(xx&-xx); 30 | } 31 | return ans; 32 | } 33 | 34 | int main(){ 35 | int p,q; 36 | int a,b,c,d; 37 | long long int val; 38 | scanf("%d %d",&n,&q); 39 | while(q--){ 40 | scanf("%d",&p); 41 | if(p==1){ 42 | scanf("%d %d %d %d",&a,&b,&c,&d); 43 | long long int ans=sum(c,d)^sum(a-1,b-1)^sum(c,b-1)^sum(a-1,d); 44 | printf("%I64d\n",ans); 45 | } 46 | else{ 47 | scanf("%d %d %d %d %I64d",&a,&b,&c,&d,&val); 48 | update(a,b,val); 49 | update(a,d+1,val); 50 | update(c+1,b,val); 51 | update(c+1,d+1,val); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/BIT/BIT_3D.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | long long matrix[101][101][101]; 8 | 9 | 10 | void update(long long n,long long x,long long y,long long z,long long val) { 11 | long long y1,x1; 12 | 13 | while(z <= n) { 14 | x1 = x; 15 | while(x1 <= n) { 16 | y1 = y; 17 | while(y1 <= n) { 18 | matrix[x1][y1][z] += val; 19 | y1 += (y1 & -y1 ); 20 | } 21 | x1 += (x1 & -x1); 22 | } 23 | z += (z & -z); 24 | } 25 | 26 | } 27 | 28 | long long calculate_sum(long long x,long long y,long long z) { 29 | long long y1,x1,sum=0; 30 | while (z>0) { 31 | x1=x; 32 | while(x1>0) { 33 | y1=y; 34 | while(y1>0) { 35 | sum += matrix[x1][y1][z]; 36 | y1-= (y1 & -y1); 37 | } 38 | x1 -= (x1 & -x1); 39 | } 40 | z -= (z & -z); 41 | 42 | } 43 | return sum; 44 | } 45 | 46 | void process(long long n,long long m) { 47 | 48 | long long x,y,z,x0,y0,z0; 49 | long long value1,value2,val; 50 | char command[10]; 51 | 52 | memset(matrix,0,sizeof(matrix)); 53 | 54 | while(m--) { 55 | scanf("%s",command); 56 | 57 | if(!strcmp(command,"QUERY")) { 58 | scanf("%lld %lld %lld %lld %lld %lld",&x0,&y0,&z0,&x,&y,&z); 59 | 60 | value1 = calculate_sum(x,y,z)- calculate_sum(x0-1,y,z) 61 | - calculate_sum(x,y0-1,z) + calculate_sum(x0-1,y0-1,z); 62 | 63 | value2 = calculate_sum(x,y,z0-1) - calculate_sum(x0-1,y,z0-1) 64 | - calculate_sum(x,y0-1,z0-1) + calculate_sum(x0-1,y0-1,z0-1); 65 | 66 | printf("%lld\n",value1 - value2); 67 | //PrintMatrix(n); 68 | 69 | } 70 | 71 | if(!strcmp(command,"UPDATE")) { 72 | 73 | scanf("%lld %lld %lld %lld",&x,&y,&z,&val); 74 | x0 = x; 75 | y0 = y; 76 | z0 = z ; 77 | 78 | value1 = calculate_sum(x,y,z)- calculate_sum(x0-1,y,z) 79 | - calculate_sum(x,y0-1,z) + calculate_sum(x0-1,y0-1,z); 80 | value2 = calculate_sum(x,y,z0-1) - calculate_sum(x0-1,y,z0-1) 81 | - calculate_sum(x,y0-1,z0-1) + calculate_sum(x0-1,y0-1,z0-1); 82 | 83 | update(n,x,y,z,val -(value1 - value2 )); 84 | 85 | } 86 | 87 | } 88 | } 89 | int main() { 90 | long long cases; scanf("%lld",&cases); 91 | while(cases--) { 92 | 93 | long long n,m; scanf("%lld %lld",&n,&m); 94 | process(n,m); 95 | } 96 | return 0; 97 | } 98 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/BIT/BIT_Range.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | long long bit1[100002],bit2[100002]; 7 | 8 | void update(long long bit[], int idx, long long val){ 9 | for(int x = idx;x <= 100001;x += x & -x) 10 | bit[x] += val; 11 | } 12 | 13 | long long query(long long bit[], int idx){ 14 | long long ret = 0; 15 | 16 | for(int x = idx;x > 0;x -= x & -x) 17 | ret += bit[x]; 18 | 19 | return ret; 20 | } 21 | 22 | int main(){ 23 | int T,N,Q; 24 | 25 | scanf("%d",&T); 26 | 27 | while(T--){ 28 | scanf("%d %d",&N,&Q); 29 | 30 | memset(bit1,0,sizeof bit1); 31 | memset(bit2,0,sizeof bit2); 32 | 33 | for(int i = 0,op,l,r,v;i < Q;++i){ 34 | scanf("%d %d %d",&op,&l,&r); 35 | 36 | if(op == 0){ 37 | scanf("%d",&v); 38 | 39 | update(bit1,l,v); update(bit1,r + 1,-v); 40 | update(bit2,l,-(long long)v * (l - 1)); update(bit2,r + 1,(long long)v * r); 41 | }else{ 42 | printf("%lld\n",query(bit1,r) * r + query(bit2,r) - query(bit1,l - 1) * (l - 1) - query(bit2,l - 1)); 43 | } 44 | } 45 | } 46 | 47 | return 0; 48 | } 49 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/Segment Tree/SegTree2D.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;ix2 or y1>y2)return; 52 | 53 | if(xx2 or yy2)return; 54 | 55 | if(x1==x2 and y1==y2) 56 | { 57 | treesum[at] = val; 58 | return; 59 | } 60 | int mx = (x1+x2)/2; 61 | int my = (y1+y2)/2; 62 | 63 | buildsum(4*at,x1,y1,mx,my,x,y,val); 64 | 65 | buildsum(4*at+1,x1,my+1,mx,y2,x,y,val); 66 | 67 | buildsum(4*at+2,mx+1,y1,x2,my,x,y,val); 68 | 69 | buildsum(4*at+3,mx+1,my+1,x2,y2,x,y,val); 70 | 71 | treesum[at] = treesum[4*at]+treesum[4*at+1]+treesum[4*at+2]+treesum[4*at+3]; 72 | return; 73 | } 74 | 75 | inline int tellsum(int at,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 76 | { 77 | if(x1>x2 or y1>y2)return 0; 78 | 79 | 80 | if(x4x2 or y3>y2)return 0; 81 | 82 | if(x1>=x3 and x2<=x4 and y1>=y3 and y2<=y4) 83 | { 84 | return treesum[at]; 85 | } 86 | int mx = (x1+x2)/2; 87 | int my = (y1+y2)/2; 88 | 89 | int a = tellsum(4*at,x1,y1,mx,my,x3,y3,x4,y4); 90 | int b = tellsum(4*at+1,x1,my+1,mx,y2,x3,y3,x4,y4); 91 | int c = tellsum(4*at+2,mx+1,y1,x2,my,x3,y3,x4,y4); 92 | int d = tellsum(4*at+3,mx+1,my+1,x2,y2,x3,y3,x4,y4); 93 | 94 | return (a+b+c+d); 95 | } 96 | 97 | 98 | int main() 99 | { 100 | int t; 101 | scanf("%d",&t); 102 | while(t--){ 103 | MEM(treesum,0); 104 | int n; 105 | scanf("%d",&n); 106 | char str[10]; 107 | while(scanf("%s",str)){ 108 | if(str[1]=='N')break; 109 | if(str[1]=='E'){ 110 | int x,y,v; 111 | scanf("%d %d %d",&x,&y,&v); 112 | buildsum(1,0,0,n-1,n-1,x,y,v); 113 | }else{ 114 | int x1,y1,x2,y2; 115 | scanf("%d %d %d %d",&x1,&y1,&x2,&y2); 116 | printf("%lld\n",tellsum(1,0,0,n-1,n-1,x1,y1,x2,y2)); 117 | } 118 | } 119 | printf("\n"); 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/Segment Tree/SegTreeAndOr.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i R or L > r or R < l)return; 64 | 65 | if(L>=l and R<=r){ 66 | tree[id][at].lazy = v; 67 | pushDown(id,at,L,R); 68 | return; 69 | } 70 | int mid = (L + R)/2; 71 | update(id,2*at,L,mid,l,r,v); 72 | update(id,2*at+1,mid+1,R,l,r,v); 73 | tree[id][at].val = tree[id][2*at].val + tree[id][2*at+1].val; 74 | } 75 | 76 | int query(int id,int at,int L,int R,int l,int r) 77 | { 78 | if(L > R or L > r or R < l)return 0; 79 | pushDown(id,at,L,R); 80 | if(L>=l and R<=r)return tree[id][at].val; 81 | int mid = (L+R)/2; 82 | int p1 = query(id,2*at,L,mid,l,r); 83 | int p2 = query(id,2*at+1,mid+1,R,l,r); 84 | return p1 + p2; 85 | } 86 | 87 | int main() 88 | { 89 | 90 | } 91 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/Segment Tree/SegTreeLazy.cpp: -------------------------------------------------------------------------------- 1 | .c#include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i end or start > r or end < l)return; 54 | 55 | if(start >= l and end <= r) 56 | { 57 | tree[node] += (end - start + 1) * val; 58 | if(start != end) 59 | { 60 | lazy[node*2] += val; 61 | lazy[node*2+1] += val; 62 | } 63 | return; 64 | } 65 | 66 | int mid = (start + end) / 2; 67 | updateRange(node*2, start, mid, l, r, val); 68 | updateRange(node*2 + 1, mid + 1, end, l, r, val); 69 | tree[node] = tree[node*2] + tree[node*2+1]; 70 | } 71 | 72 | int queryRange(int node, int start, int end, int l, int r) 73 | { 74 | if(start > end or start > r or end < l)return 0; 75 | 76 | if(lazy[node] != 0) 77 | { 78 | tree[node] += (end - start + 1) * lazy[node]; 79 | if(start != end) 80 | { 81 | lazy[node*2] += lazy[node]; 82 | lazy[node*2+1] += lazy[node]; 83 | } 84 | lazy[node] = 0; 85 | } 86 | 87 | if(start >= l and end <= r) return tree[node]; 88 | 89 | int mid = (start + end) / 2; 90 | int p1 = queryRange(node*2, start, mid, l, r); 91 | int p2 = queryRange(node*2 + 1, mid + 1, end, l, r); 92 | return (p1 + p2); 93 | } 94 | int main() 95 | { 96 | 97 | } 98 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/Segment Tree/SegTreePersistent.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | const int N = 200005; 4 | #define inf 0x3f3f3f3f 5 | #define vi vector 6 | #define all(a) a.begin(), a.end() 7 | #define Unique(a) sort(all(a)), a.erase(unique(all(a)), a.end()) 8 | 9 | struct data { 10 | int l, r, c; 11 | data() { 12 | l = r = c = 0; 13 | } 14 | data(int a, int b, int d) { 15 | l = a; 16 | r = b; 17 | c = d; 18 | } 19 | }T[N * 20]; 20 | 21 | int n, in[N], Root[N], id, qr; 22 | 23 | int update(int pr, int b, int e, int pos) { 24 | int node = ++id; 25 | T[node] = T[pr]; 26 | if(b == e) { 27 | T[node].c++; 28 | return node; 29 | } 30 | int mid = b + e >> 1; 31 | if(pos <= mid) T[node].l = update(T[node].l, b, mid, pos); 32 | else T[node].r = update(T[node].r, mid + 1, e, pos); 33 | T[node].c = T[ T[node].l ].c + T[ T[node].r ].c; 34 | return node; 35 | } 36 | 37 | int query(int pr, int cr, int b, int e, int nd) { 38 | if(b == e) return b; 39 | int have = T[ T[cr].l ].c - T[ T[pr].l ].c; 40 | // cout << "from : " << b << " " << e << " , " << T[cr].c - T[pr].c << '\n'; 41 | int mid = b + e >> 1; 42 | if(nd <= have) return query(T[pr].l, T[cr].l, b, mid, nd); 43 | else return query(T[pr].r, T[cr].r, mid + 1, e, nd - have); 44 | } 45 | 46 | int main() 47 | { 48 | scanf("%d %d", &n, &qr); 49 | for(int i = 1; i <= n; i++) scanf("%d", &in[i]); 50 | vi cmp; cmp.push_back(-inf); 51 | for(int i = 1; i <= n; i++) cmp.push_back(in[i]); Unique(cmp); 52 | for(int i = 1; i <= n; i++) in[i] = lower_bound(all(cmp), in[i]) - cmp.begin(); 53 | Root[0] = ++id; 54 | for(int i = 1; i <= n; i++) Root[i] = update(Root[i - 1], 1, cmp.size(), in[i]); 55 | while(qr--) { 56 | int l, r, k; scanf("%d %d %d", &l, &r, &k); 57 | int p = query(Root[l - 1], Root[r], 1, cmp.size(), k); 58 | int val = cmp[p]; 59 | // cerr << p << '\n'; 60 | printf("%d\n", val); 61 | } 62 | return 0; 63 | -------------------------------------------------------------------------------- /Template Codes/Data Structures/Segment Tree/SparseTable.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | 17 | #define min3(a,b,c) min(a,min(b,c)) 18 | #define max3(a,b,c) max(a,max(b,c)) 19 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 20 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 21 | #define SQR(a) ((a)*(a)) 22 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 23 | #define REP(i,b) for(int i=0;i=b;i--) 25 | #define MEM(a,x) memset(a,x,sizeof(a)) 26 | #define ABS(x) ((x)<0?-(x):(x)) 27 | 28 | #define scanI(a) scanf("%d",&a) 29 | #define scanI2(a,b) scanI(a) , scanI(b) 30 | #define scanI3(a,b,c) scanI(a), scanI(b), scanI(c) 31 | #define scanI4(a,b,c,d) scanI(a), scanI(b), scanI(c), scanI(d) 32 | 33 | #define scanL(a) scanf("%I64d",&a) 34 | #define scanL2(a,b) scanL(a) , scanL(b) 35 | #define scanL3(a,b,c) scanL(a), scanL(b), scanL(c) 36 | #define scanL4(a,b,c,d) scanL(a), scanL(b), scanL(c), scanL(d) 37 | 38 | #define SORT(v) sort(v.begin(),v.end()) 39 | #define REV(v) reverse(v.begin(),v.end()) 40 | 41 | #define FastRead ios_base::sync_with_stdio(0);cin.tie(nullptr); 42 | 43 | const int N = 100005; 44 | int ara[N],n,q,bara[N]; 45 | int table[N][18]; 46 | int save[N]; 47 | void sparsTable() { 48 | for(int i = 0; i < n; i++) table[i][0] = ara[i]; 49 | for(int j = 1; save[j] <= n; j++) for(int i = 0; i + save[j] <= n; i++) table[i][j] = max( table[i][j - 1], table[i + (save[j-1])][j - 1] ); 50 | } 51 | int LOG[N]; 52 | int query(int x, int y) { 53 | if(x == y)return ara[x]; 54 | if(x > y) swap(x, y); 55 | int k = LOG[y - x]; 56 | return max( table[x][k], table[y - save[k] + 1][k] ); 57 | } 58 | 59 | int main() 60 | { 61 | for(int i = 0;i < N;i++)LOG[i] = log2(i); 62 | for(int i = 0;i < 20;i++)save[i] = 1 << i; 63 | int t,cases = 0; 64 | scanf("%d",&t); 65 | while(t--){ 66 | scanf("%d %d",&n,&q); 67 | for(int i = 0;i < n;i++)scanf("%d",&ara[i]); 68 | sparsTable(); 69 | printf("Case #%d:\n",++cases); 70 | while(q--){ 71 | int l ,r; 72 | scanf("%d %d",&l,&r);l--;r--; 73 | printf("%d\n",query(l,r)); 74 | } 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Template Codes/DequeTechnique.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | 17 | #define min3(a,b,c) min(a,min(b,c)) 18 | #define max3(a,b,c) max(a,max(b,c)) 19 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 20 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 21 | #define SQR(a) ((a)*(a)) 22 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 23 | #define REP(i,b) for(int i=0;i=b;i--) 25 | #define MEM(a,x) memset(a,x,sizeof(a)) 26 | #define ABS(x) ((x)<0?-(x):(x)) 27 | 28 | #define scanI(a) scanf("%d",&a) 29 | #define scanI2(a,b) scanI(a) , scanI(b) 30 | #define scanI3(a,b,c) scanI(a), scanI(b), scanI(c) 31 | #define scanI4(a,b,c,d) scanI(a), scanI(b), scanI(c), scanI(d) 32 | 33 | #define scanL(a) scanf("%I64d",&a) 34 | #define scanL2(a,b) scanL(a) , scanL(b) 35 | #define scanL3(a,b,c) scanL(a), scanL(b), scanL(c) 36 | #define scanL4(a,b,c,d) scanL(a), scanL(b), scanL(c), scanL(d) 37 | 38 | #define SORT(v) sort(v.begin(),v.end()) 39 | #define REV(v) reverse(v.begin(),v.end()) 40 | 41 | #define FastRead ios_base::sync_with_stdio(0);cin.tie(nullptr); 42 | 43 | const int N = 200005; 44 | int n , ara[N], q; 45 | int main() 46 | { 47 | cin >> n >> q; 48 | FOR(i,1,n)cin >> ara[i]; 49 | 50 | while(q--){ 51 | int d; 52 | cin >> d; 53 | dequeQ; 54 | int ans = 1e9; 55 | for(int i = 1;i <= n;i++){ 56 | while(Q.size() > 0 and Q.front() <= i - d){ 57 | Q.pop_front(); 58 | } 59 | while(Q.size() > 0 and ara[Q.back()] < ara[i]){ 60 | Q.pop_back(); 61 | } 62 | Q.push_back(i); 63 | if(i >= d){ 64 | ans = min(ans,ara[Q.front()]); 65 | } 66 | } 67 | cout << ans << "\n"; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Template Codes/Dijkstra.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | struct point{ 6 | int name,val; 7 | bool operator<(const point &a)const{ 8 | return a.val Q; 13 | int dis[mx+5],cost[mx+5][mx+5]; 14 | vectorG[mx+5]; 15 | 16 | void DJ(point node){ 17 | int now = node.name; 18 | if(node.val != dis[now])return; 19 | for(int i=0;i 3 | 4 | using namespace std; 5 | 6 | #define fRead(x) freopen(x,"r",stdin) 7 | #define fWrite(x) freopen (x,"w",stdout) 8 | 9 | #define LL long long 10 | #define ULL unsigned long long 11 | #define ff first 12 | #define ss second 13 | #define pb push_back 14 | #define INF 2e16 15 | #define PI acos(-1.0) 16 | #define mk make_pair 17 | #define pii pair 18 | #define pll pair 19 | #define eps 1e-9 20 | 21 | #define min3(a,b,c) min(a,min(b,c)) 22 | #define max3(a,b,c) max(a,max(b,c)) 23 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 24 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 25 | #define SQR(a) ((a)*(a)) 26 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 27 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 28 | #define REP(i,b) for(int i=0;i r)return; 50 | int mid = (l + r)/2; 51 | pairworst = mk(1e18,-1); 52 | for(int i = x;i <= min(y,mid);i++){ 53 | worst = min(worst,mk(dp[id-1][i-1] + get(i,mid) ,i)); 54 | } 55 | dp[id][mid] = worst.first; 56 | solve(l,mid-1,x,worst.second,id); 57 | solve(mid+1,r,worst.second,y,id); 58 | } 59 | int main() 60 | { 61 | scanf("%d %d",&n,&k); 62 | for(int i = 1;i <= n;i++)scanf("%d",&ara[i]); 63 | 64 | for(int i = 1;i <= n;i++)F[i] = F[i-1] + (LL)ara[i] * (LL)i; 65 | for(int i = 1;i <= n;i++)S[i] = S[i-1] + ara[i]; 66 | 67 | for(int i = 1;i <= n;i++)dp[0][i] = get(1,i); 68 | for(int i = 1;i < k;i++){ 69 | solve(1,n,1,n,i); 70 | } 71 | printf("%lld\n",dp[k-1][n]); 72 | // for(int i = 0;i < k;i++){ 73 | // for(int j = 1;j <= n;j++)cout << dp[i][j] << " "; 74 | // cout << "\n"; 75 | // } 76 | } 77 | -------------------------------------------------------------------------------- /Template Codes/Dp Optimizations/Divide_And_Conquer.cpp: -------------------------------------------------------------------------------- 1 | //https://www.codechef.com/problems/CHEFAOR 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | #define fRead(x) freopen(x,"r",stdin) 8 | #define fWrite(x) freopen (x,"w",stdout) 9 | 10 | #define LL long long 11 | #define ULL unsigned long long 12 | #define ff first 13 | #define ss second 14 | #define pb push_back 15 | #define INF 2e16 16 | #define PI acos(-1.0) 17 | #define mk make_pair 18 | #define pii pair 19 | #define pll pair 20 | #define eps 1e-9 21 | 22 | #define min3(a,b,c) min(a,min(b,c)) 23 | #define max3(a,b,c) max(a,max(b,c)) 24 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 25 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 26 | #define SQR(a) ((a)*(a)) 27 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 28 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 29 | #define REP(i,b) for(int i=0;i R)return; 46 | int mid = (L + R)/2; 47 | pair best = mk(-1,-1); 48 | for(int i = x;i <= min(y,mid);i++){ 49 | best = max(best,{dp[id-1][i-1] + A[i][mid],i}); 50 | } 51 | dp[id][mid] = best.first; 52 | solve(L,mid-1,x,best.ss,id); 53 | solve(mid+1,R,best.ss,y,id); 54 | } 55 | int main() 56 | { 57 | int t; 58 | scanf("%d",&t); 59 | while(t--){ 60 | 61 | scanf("%d %d",&n,&k); 62 | for(int i = 1;i <= n;i++)scanf("%d",&ara[i]); 63 | 64 | for(int i = 1;i <= n;i++){ 65 | A[i][i] = ara[i]; 66 | for(int j = i + 1;j <= n;j++){ 67 | A[i][j] = A[i][j-1] | ara[j]; 68 | } 69 | } 70 | for(int i = 1;i <= n;i++){ 71 | dp[0][i] = A[1][i]; 72 | } 73 | for(int i = 1;i < k;i++){ 74 | solve(1,n,1,n,i); 75 | } 76 | printf("%lld\n",dp[k-1][n]); 77 | } 78 | } 79 | /* 80 | 1 81 | 4 2 82 | 1 2 3 4 83 | */ 84 | -------------------------------------------------------------------------------- /Template Codes/Dp Optimizations/Sibling Dp.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;ig[N]; 39 | int sibling[N],child[N],ara[N]; 40 | 41 | void build(int node,int pre) 42 | { 43 | int last = -1; 44 | for(pii i : g[node]){ 45 | if(i.first == pre)continue; 46 | if(last != -1)sibling[last] = i.first; 47 | if(child[node] == 0)child[node] = i.first; 48 | last = i.first; 49 | ara[i.first] = i.second; 50 | build(i.first,node); 51 | } 52 | } 53 | int dp[N][N]; 54 | int call(int node,int res) 55 | { 56 | if(res < 0)return 1e9; 57 | if(node == 0)return 0; 58 | if(dp[node][res] != -1)return dp[node][res]; 59 | int ret = 1e9; 60 | 61 | //new child 62 | ret = min(ret,1 + call(child[node],k) + call(sibling[node],res)); 63 | 64 | for(int i = ara[node];i <= res;i++){ 65 | ret = min(ret,call(child[node],i - ara[node]) + call(sibling[node],res - i)); 66 | } 67 | return dp[node][res] = ret; 68 | } 69 | int main() 70 | { 71 | int t,cases = 0; 72 | scanf("%d",&t); 73 | while(t--){ 74 | for(int i = 0;i < N;i++)g[i].clear(); 75 | MEM(sibling,0); 76 | MEM(child,0); 77 | MEM(dp,-1); 78 | scanf("%d %d",&n,&k); 79 | 80 | for(int i = 1;i < n;i++){ 81 | int u , v , w; 82 | scanf("%d %d %d",&u,&v,&w); 83 | g[u].push_back(mk(v,w)); 84 | g[v].push_back(mk(u,w)); 85 | } 86 | build(1,0); 87 | printf("Case %d: %d\n",++cases,1 + call(1,k)); 88 | 89 | } 90 | } 91 | /* 92 | 5 93 | 5 2 94 | 2 1 1 95 | 2 5 1 96 | 1 3 1 97 | 1 4 1 98 | 6 5 99 | 1 5 2 100 | 3 4 1 101 | 1 4 1 102 | 4 2 2 103 | 3 6 1 104 | 1 100 105 | 5 1 106 | 1 2 100 107 | 1 3 1 108 | 1 4 2 109 | 1 5 1 110 | 5 3 111 | 1 2 2 112 | 1 3 1 113 | 2 4 1 114 | 2 5 1 115 | 116 | 1 117 | 6 5 118 | 1 2 1 119 | 1 3 1 120 | 1 4 1 121 | 4 5 1 122 | 4 6 1 123 | 124 | */ 125 | -------------------------------------------------------------------------------- /Template Codes/DsuOnTree_246E.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 1000000000 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iroots,G[N]; 42 | mapmp; 43 | vectorque[N]; 44 | 45 | int n,m; 46 | int ara[N],L[N],answer[N]; 47 | 48 | void dfs(int node,int deep) 49 | { 50 | L[node] = deep; 51 | for(int i : G[node]){ 52 | dfs(i,deep+1); 53 | } 54 | } 55 | 56 | void dsu(int node,map> &g) 57 | { 58 | 59 | for(int i : G[node]){ 60 | map>s; 61 | dsu(i,s); 62 | if(s.size() > g.size())swap(g,s); 63 | 64 | for(auto it : s){ 65 | g[it.ff].insert(it.ss.begin(),it.ss.end()); 66 | } 67 | } 68 | g[L[node]].insert(ara[node]); 69 | 70 | for(pii i: que[node]){ 71 | answer[i.ss] = g[i.ff].size(); 72 | } 73 | } 74 | int main() 75 | { 76 | FastRead 77 | cin >> n; 78 | FOR(i,1,n) 79 | { 80 | string s; int p; 81 | cin >> s >> p; 82 | static int id = 0; 83 | if(mp[s] == 0)mp[s] = ++id; 84 | 85 | ara[i] = mp[s]; 86 | 87 | if(p == 0)roots.push_back(i); 88 | else G[p].push_back(i); 89 | } 90 | for(int i : roots)dfs(i,0); 91 | 92 | cin >> m; 93 | FOR(i,1,m) 94 | { 95 | int v,k; 96 | cin >> v >> k; 97 | int lev = L[v] + k; 98 | que[v].push_back(mk(lev,i)); 99 | } 100 | map>g; 101 | for(int i : roots){ 102 | dsu(i,g); 103 | g.clear(); 104 | } 105 | FOR(i,1,m)cout << answer[i] << "\n"; 106 | } 107 | -------------------------------------------------------------------------------- /Template Codes/GaussianElemination.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | const int N = 1; 4 | double mat[N][N + 1]; 5 | void RowSwap(int i, int j) 6 | { 7 | for (int k=0; k<=N; k++) 8 | { 9 | double temp = mat[i][k]; 10 | mat[i][k] = mat[j][k]; 11 | mat[j][k] = temp; 12 | } 13 | } 14 | int ForwardElemination() 15 | { 16 | for (int k=0; k v_max)v_max = mat[i][k], i_max = i; 22 | 23 | if (!mat[k][i_max]) return k; 24 | 25 | if (i_max != k)RowSwap(k, i_max); 26 | 27 | for (int i=k+1; i= 0; i--) 41 | { 42 | x[i] = mat[i][N]; 43 | 44 | for (int j=i+1; j 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i pt; 39 | #define x real() 40 | #define y imag() 41 | 42 | double cross(pt v, pt w) {return (conj(v)*w).y;}///No Dependency 43 | 44 | double area2(pt a, pt b, pt c) ///Dependency : cross 45 | { 46 | return cross(a,b) + cross(b,c) + cross(c,a); 47 | } 48 | 49 | bool between(const pt &a, const pt &b, const pt &c)///Dependency : cross,area2 50 | { 51 | return (fabs(area2(a,b,c)) < eps && (a.x-b.x)*(c.x-b.x) <= 0 && (a.y-b.y)*(c.y-b.y) <= 0); 52 | } 53 | 54 | bool cmp(pt &a,pt &b) 55 | { 56 | if(a.x != b.x)return a.x < b.x; 57 | return a.y < b.y; 58 | } 59 | #define REMOVE_REDUNDANT 60 | void ConvexHull(vector &pts) 61 | { 62 | sort(pts.begin(), pts.end(),cmp); 63 | pts.erase(unique(pts.begin(), pts.end()), pts.end()); 64 | vector up, dn; 65 | for (int i = 0; i < pts.size(); i++) 66 | { 67 | while (up.size() > 1 && area2(up[up.size()-2], up.back(), pts[i]) >= 0) up.pop_back(); 68 | while (dn.size() > 1 && area2(dn[dn.size()-2], dn.back(), pts[i]) <= 0) dn.pop_back(); 69 | up.push_back(pts[i]); 70 | dn.push_back(pts[i]); 71 | } 72 | pts = dn; 73 | for (int i = (int) up.size() - 2; i >= 1; i--) pts.push_back(up[i]); 74 | 75 | #ifdef REMOVE_REDUNDANT 76 | if (pts.size() <= 2) return; 77 | dn.clear(); 78 | dn.push_back(pts[0]); 79 | dn.push_back(pts[1]); 80 | for (int i = 2; i < pts.size(); i++) 81 | { 82 | if (between(dn[dn.size()-2], dn[dn.size()-1], pts[i])) dn.pop_back(); 83 | dn.push_back(pts[i]); 84 | } 85 | if (dn.size() >= 3 && between(dn.back(), dn[0], dn[1])) 86 | { 87 | dn[0] = dn.back(); 88 | dn.pop_back(); 89 | } 90 | pts = dn; 91 | #endif 92 | } 93 | 94 | int main() 95 | { 96 | int n; 97 | while(cin >> n){ 98 | if(n < 3)break; 99 | vectorpts; 100 | for(int i = 1;i <= n;i++){ 101 | int a,b; 102 | cin >> a >> b; 103 | pts.push_back(pt(a,b)); 104 | } 105 | ConvexHull(pts); 106 | } 107 | 108 | 109 | 110 | } 111 | -------------------------------------------------------------------------------- /Template Codes/Geometry/PointInsidePolygon.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i pt; 39 | #define x real() 40 | #define y imag() 41 | 42 | double cross(pt v, pt w) {return (conj(v)*w).y;}///No Dependency 43 | 44 | double area2(pt a, pt b, pt c) ///Dependency : cross 45 | { 46 | return cross(a,b) + cross(b,c) + cross(c,a); 47 | } 48 | 49 | bool isLinear(vector&pts,int x1,int y1,int x2,int y2) 50 | { 51 | int n = pts.size(); 52 | for(int i = 0;i < pts.size();i++){ 53 | if(ABS(area2(pts[i],pt(x2,y2),pt(x1,y1))) < eps)return 0; 54 | } 55 | return 1; 56 | } 57 | double orient(pt a,pt b,pt c) 58 | { 59 | return cross(b-a,c-a); 60 | } 61 | bool segmentToSegment(pt a,pt b,pt c,pt d,pt &out) 62 | { 63 | double oa = orient(c,d,a); 64 | double ob = orient(c,d,b); 65 | double oc = orient(a,b,c); 66 | double od = orient(a,b,d); 67 | 68 | if(oa * ob < 0 && oc * od < 0){ 69 | out = (a * ob - b * oa)/(ob - oa); 70 | return true; 71 | } 72 | return false; 73 | } 74 | bool pointInsidePolygon(vector&pts,int x1,int y1) ///pts contains set of points of non-convex polygon 75 | { /// (x1,y1) query point 76 | int x2 = 1e9,y2 = 1e8; 77 | while(!isLinear(pts,x1,y1,x2,y2)){ 78 | y2--; 79 | } 80 | int inc = 0; 81 | int n = pts.size(); 82 | for(int i = 0;i < pts.size();i++){ 83 | pt out; 84 | if(segmentToSegment(pts[i],pts[(i+1)%n],pt(x1,y1),pt(x2,y2),out))inc = 1 - inc; 85 | } 86 | return inc; 87 | } 88 | 89 | int main() 90 | { 91 | int n; 92 | while(cin >> n){ 93 | if(n < 3)break; 94 | vectorpts; 95 | for(int i = 1;i <= n;i++){ 96 | int a,b; 97 | cin >> a >> b; 98 | pts.push_back(pt(a,b)); 99 | } 100 | int x1,y1;cin >> x1 >> y1; 101 | bool flag = pointInsidePolygon(pts,x1,y1); 102 | if(flag)cout << "T\n"; 103 | else cout << "F\n"; 104 | } 105 | 106 | 107 | 108 | } 109 | -------------------------------------------------------------------------------- /Template Codes/Graph/Flow/FastDinicMaxFlow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i g[maxnodes]; 49 | 50 | void addEdge(int s, int t, int cap) 51 | { 52 | Edge a = {t, g[t].size(), 0, cap}; 53 | Edge b = {s, g[s].size(), 0, 0}; 54 | g[s].push_back(a); 55 | g[t].push_back(b); 56 | } 57 | 58 | bool dinic_bfs() 59 | { 60 | fill(dist, dist + nodes, -1); 61 | 62 | dist[src] = 0; 63 | int index = 0; 64 | q[index++] = src; 65 | 66 | for (int i = 0; i < index; i++) 67 | { 68 | int u = q[i]; 69 | for (int j = 0; j < (int) g[u].size(); j++) 70 | { 71 | Edge &e = g[u][j]; 72 | if (dist[e.to] < 0 && e.f < e.cap) 73 | { 74 | dist[e.to] = dist[u] + 1; 75 | q[index++] = e.to; 76 | } 77 | } 78 | } 79 | return dist[dest] >= 0; 80 | } 81 | 82 | int dinic_dfs(int u, int f) { 83 | if (u == dest) 84 | return f; 85 | 86 | for (int &i = work[u]; i < (int) g[u].size(); i++) { 87 | Edge &e = g[u][i]; 88 | 89 | if (e.cap <= e.f) continue; 90 | 91 | if (dist[e.to] == dist[u] + 1) 92 | { 93 | int flow = dinic_dfs(e.to, min(f, e.cap - e.f)); 94 | if (flow > 0) 95 | { 96 | e.f += flow; 97 | g[e.to][e.rev].f -= flow; 98 | return flow; 99 | } 100 | } 101 | } 102 | return 0; 103 | } 104 | 105 | int maxFlow(int _src, int _dest) 106 | { 107 | src = _src; 108 | dest = _dest; 109 | int result = 0; 110 | while (dinic_bfs()) 111 | { 112 | fill(work, work + nodes, 0); 113 | while (int delta = dinic_dfs(src, INT_MAX)) 114 | result += delta; 115 | } 116 | return result; 117 | } 118 | 119 | int main() 120 | { 121 | FastRead 122 | int n,m; 123 | cin >> n >> m; 124 | FOR(i,1,m) 125 | { 126 | int a,b,c; 127 | cin >> a >> b >> c; 128 | addEdge(a-1,b-1,c); 129 | addEdge(b-1,a-1,c); 130 | } 131 | cout << maxFlow(0,n-1) << "\n"; 132 | } 133 | -------------------------------------------------------------------------------- /Template Codes/Graph/Flow/FordFulkersonFlow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iQ; 56 | Q.push(s); 57 | vis[s]=1; 58 | pr[s]=-1; 59 | while(not Q.empty()){ 60 | int node = Q.front(); 61 | Q.pop(); 62 | for(int i = 1;i<=n;i++){ 63 | if(vis[i]==0 and cost[node][i]>0){ 64 | Q.push(i); 65 | pr[i]=node; 66 | vis[i]=1; 67 | } 68 | } 69 | } 70 | return vis[t]; 71 | 72 | } 73 | int main() 74 | { 75 | int T,cases=0; 76 | scanf("%d",&T); 77 | while(T--){ 78 | scanf("%d",&n); 79 | 80 | MEM(cost,0);MEM(pr,0); 81 | 82 | scanf("%d %d %d",&s,&t,&c); 83 | while(c--){ 84 | int a,b,w; 85 | scanf("%d %d %d",&a,&b,&w); 86 | cost[a][b]+=w; 87 | cost[b][a]+=w; 88 | } 89 | int flow = 0; 90 | 91 | while(bfs()){ 92 | int path = 1e9; 93 | for(int v = t;v!=s;v= pr[v]){ 94 | int u = pr[v]; 95 | path = min(path,cost[u][v]); 96 | } 97 | for(int v = t;v!=s;v=pr[v]){ 98 | int u = pr[v]; 99 | cost[u][v]-=path; 100 | cost[v][u]+=path; 101 | } 102 | flow+=path; 103 | } 104 | printf("Case %d: %d\n",++cases,flow); 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /Template Codes/Graph/Flow/MCMF.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | typedef pair pll; 5 | struct CostFlow { 6 | static const int MXN = 10005; 7 | static const long long INF = 102938475610293847LL; 8 | struct Edge { 9 | int v, r; 10 | long long f, c; 11 | }; 12 | int n, s, t, prv[MXN], prvL[MXN], inq[MXN]; 13 | long long dis[MXN], fl, cost; 14 | vector E[MXN]; 15 | void init(int _n, int _s, int _t) { 16 | n = _n; s = _s; t = _t; 17 | for (int i = 0; i < n; i++) E[i].clear(); 18 | fl = cost = 0; 19 | } 20 | void AddEdge(int u, int v, long long f, long long c) { 21 | E[u].push_back({v, (int) E[v].size() , f, c}); 22 | E[v].push_back({u, (int) E[u].size()-1, 0, -c}); 23 | } 24 | pll flow() { 25 | while (true) { 26 | for (int i=0; i q({s}); 31 | while (!q.empty()) { 32 | int u = q.front(); q.pop(); 33 | inq[u] = 0; 34 | for (int i = 0; i < E[u].size(); i++) { 35 | int v = E[u][i].v; 36 | long long w = E[u][i].c; 37 | if (E[u][i].f > 0 && dis[v] > dis[u] + w) { 38 | prv[v] = u; prvL[v] = i; 39 | dis[v] = dis[u] + w; 40 | if (!inq[v]) { 41 | inq[v] = 1; 42 | q.push(v); 43 | } 44 | } 45 | } 46 | } 47 | if (dis[t] == INF) break; 48 | long long tf = INF; 49 | for (int v = t, u, l; v != s; v = u) { 50 | u = prv[v]; l = prvL[v]; 51 | tf = min(tf, E[u][l].f); 52 | } 53 | for (int v = t, u, l; v != s; v =u) { 54 | u = prv[v]; l = prvL[v]; 55 | E[u][l].f -= tf; 56 | E[v][E[u][l].r].f += tf; 57 | } 58 | cost += tf * dis[t]; 59 | fl += tf; 60 | } 61 | return {fl, cost}; 62 | } 63 | }flow; 64 | 65 | const int N = 10010; 66 | 67 | int dx[] = {0, 0, 1, -1}; 68 | int dy[] = {1, -1, 0, 0}; 69 | 70 | int n, k, x[N], y[N], t[N]; 71 | map > g; 72 | 73 | int main() { 74 | cin >> n >> k; 75 | for (int i = 1; i <= k; ++i) { 76 | scanf("%d %d %d", x + i, y + i, t + i); 77 | g[x[i]][y[i]] = i; 78 | } 79 | int src = 0, med = k + 1, snk = k + 2; 80 | CostFlow mcmf; 81 | mcmf.init(1 + k + 1 + 1, src, snk); 82 | mcmf.AddEdge(src, med, n, 0); 83 | for (int i = 1; i <= k; ++i) { 84 | if ((x[i] + y[i]) & 1) { 85 | mcmf.AddEdge(med, i, 1, -t[i]); 86 | mcmf.AddEdge(i, snk, 1, 0); 87 | } else { 88 | mcmf.AddEdge(med, i, 1, 0); 89 | mcmf.AddEdge(i, snk, 1, -t[i]); 90 | } 91 | } 92 | for (int i = 1; i <= k; ++i) { 93 | if ((x[i] + y[i]) % 2 == 0) continue; 94 | for (int j = 0; j < 4; ++j) { 95 | int px = x[i] + dx[j], py = y[i] + dy[j]; 96 | if (g.find(px) != g.end() and g[px].find(py) != g[px].end()) { 97 | mcmf.AddEdge(i, g[px][py], N, 0); 98 | } 99 | } 100 | } 101 | cout << -mcmf.flow().second << '\n'; 102 | return 0; 103 | } 104 | -------------------------------------------------------------------------------- /Template Codes/Graph/Flow/Min_Cost_Max_Flow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | const int N = 105; 5 | int cost[N][N],cap[N][N],ara[N][N]; 6 | int pr[N],dis[N]; 7 | 8 | vector >e; 9 | void addEdge(int u,int v,int w) 10 | { 11 | e.push_back(make_pair(u,v)); 12 | e.push_back(make_pair(v,u)); 13 | cap[u][v] += 1; 14 | cost[u][v] = 1000000-w; 15 | cost[v][u] = 1000000+w; 16 | } 17 | 18 | int bel(int s,int t) 19 | { 20 | for(int i = 0;i> t; 52 | while(t--) 53 | { 54 | init(); 55 | int n; 56 | cin >> n; 57 | for(int i = 1;i<=n;i++){ 58 | for(int j = 1;j<=n;j++){ 59 | cin >> ara[i][j]; 60 | addEdge(i , n + j, ara[i][j]); 61 | } 62 | } 63 | for(int i = 1;i<=n;i++){ 64 | addEdge(0,i,0); 65 | addEdge(n + i,2*n + 1,0); 66 | } 67 | int flow = 0,answer = 0; 68 | while(bel(0,2*n+1)) 69 | { 70 | for(int v = 2*n + 1;v!=0;v=pr[v]){ 71 | int u = pr[v]; 72 | cap[u][v]-=1; 73 | cap[v][u]-=1; 74 | answer += cost[u][v]; 75 | } 76 | flow++; 77 | } 78 | cout << "Case " << ++cases << ": " << (n*3*1000000 - answer) << "\n"; 79 | } 80 | } 81 | 82 | -------------------------------------------------------------------------------- /Template Codes/HLD_Node_Update.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | 5 | const int MAXN = 30000; 6 | const int MAXM = 16; 7 | 8 | struct bit{ 9 | long long v[MAXN]; 10 | int maxSize; 11 | 12 | void init(int n) { 13 | maxSize = n; 14 | memset(v, 0, sizeof v); 15 | } 16 | void add(int where, long long what){ 17 | for (where++; where <= maxSize; where += where & -where){ 18 | v[where] += what; 19 | } 20 | } 21 | long long query(int where){ 22 | long long sum = v[0]; 23 | for (where++; where > 0; where -= where & -where){ 24 | sum += v[where]; 25 | } 26 | return sum; 27 | } 28 | long long query(int from, int to){ 29 | return query(to) - query(from-1); 30 | } 31 | 32 | }; 33 | 34 | 35 | bit ft; 36 | int n; 37 | int val[MAXN]; 38 | 39 | // Heavy-Light Decomposition 40 | struct TreeDecomposition { 41 | vector g[MAXN], c[MAXN]; 42 | int s[MAXN]; // subtree size 43 | int p[MAXN]; // parent id 44 | int r[MAXN]; // chain root id 45 | int t[MAXN]; // index used in segtree/bit/... 46 | int d[MAXN]; // depht 47 | int ts; 48 | 49 | void dfs(int v, int f) { 50 | p[v] = f; 51 | s[v] = 1; 52 | if (f != -1) d[v] = d[f] + 1; 53 | else d[v] = 0; 54 | 55 | for (int i = 0; i < g[v].size(); ++i) { 56 | int w = g[v][i]; 57 | if (w != f) { 58 | dfs(w, v); 59 | s[v] += s[w]; 60 | } 61 | } 62 | } 63 | 64 | void hld(int v, int f, int k) { 65 | ft.add(ts, val[v]); 66 | t[v] = ts++; 67 | c[k].push_back(v); 68 | r[v] = k; 69 | 70 | int x = 0, y = -1; 71 | for (int i = 0; i < g[v].size(); ++i) { 72 | int w = g[v][i]; 73 | if (w != f) { 74 | if (s[w] > x) { 75 | x = s[w]; 76 | y = w; 77 | } 78 | } 79 | } 80 | if (y != -1) { 81 | hld(y, v, k); 82 | } 83 | 84 | for (int i = 0; i < g[v].size(); ++i) { 85 | int w = g[v][i]; 86 | if (w != f && w != y) { 87 | hld(w, v, w); 88 | } 89 | } 90 | } 91 | 92 | void init(int n) { 93 | for (int i = 0; i < n; ++i) { 94 | g[i].clear(); 95 | } 96 | } 97 | 98 | void add(int a, int b) { 99 | g[a].push_back(b); 100 | g[b].push_back(a); 101 | } 102 | 103 | void build() { 104 | ts = 0; 105 | dfs(0, -1); 106 | hld(0, 0, 0); 107 | } 108 | }; 109 | 110 | TreeDecomposition tree; 111 | 112 | 113 | 114 | int magic(int a, int b) { // C : LCA btwn a and b 115 | if ( tree.r[a] == tree.r[b] ) { 116 | int ia = tree.t[a]; 117 | int ib = tree.t[b]; 118 | if (ia > ib) swap(ia,ib); 119 | return ft.query(ia, ib); 120 | } 121 | 122 | int ans = 0; 123 | 124 | if (tree.d[tree.r[a]] > tree.d[tree.r[b]]) { 125 | ans += ft.query(tree.t[tree.r[a]], tree.t[a]) + magic(tree.p[tree.r[a]], b); 126 | } else { 127 | ans += ft.query(tree.t[tree.r[b]], tree.t[b]) + magic(tree.p[tree.r[b]], a); 128 | } 129 | 130 | return ans; 131 | } 132 | 133 | void solve() { 134 | scanf("%d", &n); 135 | tree.init(n+1); 136 | ft.init(n+1); 137 | for (int i = 0; i < n; ++i) scanf("%d", val + i); 138 | 139 | int u, v; 140 | for (int i = 0; i < (n - 1); ++i ) { 141 | scanf("%d%d", &u,&v); 142 | tree.add(u,v); 143 | } 144 | 145 | tree.build(); 146 | 147 | 148 | int queries; scanf("%d", &queries); 149 | int type, a, b; 150 | while (queries-- ) { 151 | scanf("%d%d%d", &type, &a, &b); 152 | if (type) { 153 | int idx = tree.t[a]; 154 | ft.add(idx, -ft.query(idx,idx)); 155 | ft.add(idx, b); 156 | } else { 157 | printf("%lld\n",magic(a , b)); 158 | } 159 | } 160 | 161 | } 162 | 163 | int main() { 164 | 165 | int tc; scanf("%d", &tc); 166 | for (int i = 0; i < tc; ++i) { 167 | printf("Case %d:\n", i+1); 168 | solve(); 169 | } 170 | return 0; 171 | } 172 | -------------------------------------------------------------------------------- /Template Codes/Hash/HashSubString.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 5e13 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | #define all(a) a.begin(),a.end() 19 | #define Unique(a) sort(all(a)),a.erase(unique(all(a)),a.end()) 20 | 21 | #define min3(a,b,c) min(a,min(b,c)) 22 | #define max3(a,b,c) max(a,max(b,c)) 23 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 24 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 25 | #define SQR(a) ((a)*(a)) 26 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 27 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 28 | #define REP(i,b) for(int i=0;iv; 40 | void match() 41 | { 42 | int cnt = 0; 43 | int j = 0; 44 | for(int i = 0;i < str.size();i++){ 45 | while(j > 0 and str[i] != s[j]){ 46 | j = F[j-1]; 47 | } 48 | if(str[i] == s[j])j++; 49 | if(j == s.size())j = F[j-1],v.push_back(i - s.size() + 2); 50 | } 51 | } 52 | void prefix_function() 53 | { 54 | F[0] = 0; 55 | for(int i = 1;i 0 and s[j] != s[i]){ 58 | j = F[j-1]; 59 | } 60 | if(s[i] == s[j])j++; 61 | F[i] = j; 62 | } 63 | } 64 | int main() 65 | { 66 | FastRead 67 | int t; 68 | cin >> t; 69 | while(t--) 70 | { 71 | v.clear(); 72 | cin >> str >> s; 73 | prefix_function(); 74 | match(); 75 | if(v.empty())cout << "Not Found\n"; 76 | else{ 77 | cout << v.size() << "\n"; 78 | for(int i = 0;i 2 | 3 | using namespace std; 4 | 5 | struct edge{ 6 | int u,v,w; 7 | bool operator < ( const edge &p ) const { 8 | return w < p.w; 9 | } 10 | }; 11 | int pr[MAX]; 12 | vectore; 13 | 14 | int find(int r){ 15 | return (pr[r]==r) ? r : pr[r]=find(pr[r]); 16 | } 17 | 18 | int mst(int n){ 19 | 20 | sort(e.begin(),e.end()); 21 | for(int i=1;i<=n;i++)pr[i]=i; ///Set Parent 22 | 23 | int count=0,s=0; 24 | for(int i=0;i<(int)e.size();i++){ 25 | 26 | int u=find(e[i].u); 27 | int v=find(e[i].v); 28 | 29 | if(u!=v){ 30 | pr[u]=v; 31 | count++; ///Counts the number of edges 32 | s+=e[i].w; ///Counts the sum of length of edges 33 | if(count==n-1) break; ///When tree is formed,it breaks 34 | } 35 | } 36 | return s; 37 | } 38 | -------------------------------------------------------------------------------- /Template Codes/LCA_Self.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 5e13 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | #define all(a) a.begin(),a.end() 19 | #define Unique(a) sort(all(a)),a.erase(unique(all(a)),a.end()) 20 | 21 | #define min3(a,b,c) min(a,min(b,c)) 22 | #define max3(a,b,c) max(a,max(b,c)) 23 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 24 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 25 | #define SQR(a) ((a)*(a)) 26 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 27 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 28 | #define REP(i,b) for(int i=0;iG[N]; 44 | 45 | int dfs(int node,int pre,int dep) 46 | { 47 | Pr[node] = pre; 48 | L[node] = dep; 49 | int ret = 1; 50 | for(int i : G[node]){ 51 | if(i==pre)continue; 52 | ret += dfs(i,node,dep+1); 53 | } 54 | return child[node] = ret; 55 | } 56 | void init() 57 | { 58 | for(int i = 0;i<=N;i++)for(int j = 0;j<22;j++)P[i][j] = 1; 59 | FOR(i,1,N)P[i][0] = Pr[i]; 60 | 61 | for(int j = 1;(1 << j) <= N;j++){ 62 | for(int i = 0;i<=N;i++){ 63 | P[i][j] = P[P[i][j-1]][j-1]; 64 | } 65 | } 66 | } 67 | int query(int p,int q) 68 | { 69 | if(L[p] < L[q])swap(p,q); 70 | 71 | for(int i = 21;i>=0;i--){ 72 | if(L[P[p][i]] >= L[q])p = P[p][i]; 73 | } 74 | if(p == q)return p; 75 | for(int i = 21;i>=0;i--){ 76 | if(P[p][i]!=P[q][i]){ 77 | p = P[p][i]; q = P[q][i]; 78 | } 79 | } 80 | return Pr[p]; 81 | } 82 | -------------------------------------------------------------------------------- /Template Codes/LIS.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i &S, vector &LIS) 48 | { 49 | vector L(S.size()); 50 | int lisCount = 0; 51 | for (int i = 0; i < S.size(); ++i) 52 | { 53 | int pos = lower_bound(L.begin(), L.begin() + lisCount, S[i]) 54 | - L.begin(); 55 | L[pos] = S[i]; 56 | if (pos == lisCount) 57 | ++lisCount; 58 | 59 | LIS[i] = pos + 1; 60 | } 61 | } 62 | 63 | int main() 64 | { 65 | int n; 66 | while(scanf("%d",&n)!=EOF){ 67 | vectorv(n); 68 | for(int i = 0;iinc(n),dec(n); 70 | 71 | doLIS(v,inc); 72 | getchar(); 73 | getchar(); 74 | REV(v); 75 | doLIS(v,dec); 76 | REV(dec); 77 | int mx = 0; 78 | for(int i = 0;i 2 | using namespace std; 3 | 4 | typedef long long ll; 5 | typedef pair ii; 6 | 7 | const int mod = 999377; 8 | int f[mod], inv[mod]; 9 | 10 | int nCr(int n, int r) { 11 | if(r > n) return 0; 12 | int ret = (ll) f[n] * inv[r] % mod; 13 | return (ll) ret * inv[n - r] % mod; 14 | } 15 | 16 | int lucas(ll n, ll r) { 17 | if(!r) return 1; 18 | return (ll) lucas(n / mod, r / mod) * nCr(n % mod, r % mod) % mod; 19 | } 20 | 21 | inline int Pow(int a, int p) { 22 | int ret = 1; while(p) { 23 | if(p & 1) ret = (ll) ret * a % mod; 24 | a = (ll) a * a % mod; 25 | p >>= 1; 26 | } return ret; 27 | } 28 | 29 | int main(int argc, char const *argv[]) { 30 | #ifdef LOCAL 31 | freopen("in", "r", stdin); 32 | #endif 33 | f[0] = 1; 34 | for(int i = 1; i < mod; ++i) { 35 | f[i] = (ll) i * f[i - 1] % mod; 36 | } 37 | 38 | inv[mod - 2] = Pow(f[mod - 2], mod - 2); 39 | for(int i = mod - 3; i >= 0; --i) { 40 | inv[i] = (ll) inv[i + 1] * (i + 1) % mod; 41 | } 42 | 43 | ios_base::sync_with_stdio(0); cin.tie(0); 44 | 45 | int t, co = 0; cin >> t; while(t--) { 46 | ll n; cin >> n; 47 | cout << "Case " << ++co << ": " << lucas(2 * n, n) << endl; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Template Codes/MOalgo.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i r){ 107 | remove(mor); 108 | mor--; 109 | } 110 | while(mol < l){ 111 | remove(mol); 112 | mol++; 113 | } 114 | 115 | while(mol>l){ 116 | mol--; 117 | add(mol); 118 | } 119 | 120 | answer[Q[i].id]=value; 121 | } 122 | 123 | for(int i = 0;i 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i i) { 62 | P[i] = min(r - i, P[iMirror]); 63 | } 64 | 65 | while (Q[i + 1 + P[i]] == Q[i - 1 - P[i]]){ 66 | P[i]++; 67 | } 68 | 69 | 70 | if (i + P[i] > r) { 71 | c = i; 72 | r = i + P[i]; 73 | } 74 | } 75 | 76 | 77 | // cout << Q << endl; 78 | LL len = s.size(); 79 | 80 | for(LL i = 1;i <= len;i++)R[i] = len + 1; 81 | 82 | for(LL i = 1;i <= len;i++){ 83 | LL palen = P[2 * i]; 84 | if(palen < k)continue; 85 | LL dif = palen - k; 86 | palen = palen - (dif/2) * 2; 87 | 88 | LL Left = i - palen/2; 89 | LL Right = i + palen/2; 90 | R[Left] = min(R[Left],Right); 91 | // cout << Left << " " << Right << endl; 92 | } 93 | // cout << endl; 94 | for(LL i = 1;i < len;i++){ 95 | LL palen = P[2 * i + 1]; 96 | if(palen < k or palen == 0)continue; 97 | LL dif = palen - k; 98 | palen = palen - (dif/2) * 2; 99 | 100 | palen/=2; 101 | LL Left = i - (palen - 1); 102 | LL Right = i + palen; 103 | R[Left] = min(R[Left],Right); 104 | // cout << Left << " " << Right << endl; 105 | } 106 | for(LL i = len - 1;i >= 1;i--){ 107 | R[i] = min(R[i],R[i+1]); 108 | } 109 | LL total = (len * (len + 1))/2; 110 | LL ans = 0; 111 | FOR(i,1,len) 112 | { 113 | ans = ans + (len - R[i] + 1); 114 | } 115 | cout << total - ans << "\n"; 116 | 117 | } 118 | 119 | int main() 120 | { 121 | FastRead 122 | LL t; 123 | cin >> t; 124 | while(t--){ 125 | cin >> k; 126 | string s; 127 | cin >> s; 128 | longestPalindromeSubstring(s); 129 | 130 | } 131 | return 0; 132 | } 133 | -------------------------------------------------------------------------------- /Template Codes/MatrixExpo.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i> n >> m; 76 | for(int i = 1;i <= m;i++){ 77 | int a,b; 78 | cin >> a >> b; 79 | a--;b--; 80 | mat[0][a][b] = mat[0][b][a] = 1; 81 | } 82 | generate(); 83 | 84 | int q,cases = 0; 85 | cin >> q; 86 | while(q--){ 87 | int k;cin >> k; 88 | cout << "Query " << ++cases << ":\n"; 89 | 90 | solve(n,k); 91 | } 92 | 93 | } 94 | 95 | -------------------------------------------------------------------------------- /Template Codes/Mobius.cpp: -------------------------------------------------------------------------------- 1 | int N = 15; 2 | 3 | int mu[N+1]; 4 | memset(mu,0,sizeof(mu)); 5 | mu[1] = 1; 6 | 7 | for(int i = 1;i<=N;++i) 8 | for(int j = 2*i;j<=N;j += i) 9 | mu[j] -= mu[i]; 10 | 11 | for(int i = 1;i<=N;++i) 12 | printf("%d : %d\n",i,mu[i]); 13 | -------------------------------------------------------------------------------- /Template Codes/Modular Inverse Using Extended Euclid.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 3e18 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | 18 | #define min3(a,b,c) min(a,min(b,c)) 19 | #define max3(a,b,c) max(a,max(b,c)) 20 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 21 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 22 | #define SQR(a) ((a)*(a)) 23 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 24 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 25 | #define REP(i,b) for(int i=0;i 2 | #define EPS 1e-7 3 | using namespace std; 4 | 5 | typedef long long LL; 6 | //this algorithm is O(k log^3 n) 7 | 8 | LL ModularMultiplication(LL a, LL b, LL m) 9 | { 10 | LL ret=0, c=a; 11 | while(b) 12 | { 13 | if(b&1) ret=(ret+c)%m; 14 | b>>=1; c=(c+c)%m; 15 | } 16 | return ret; 17 | } 18 | LL ModularExponentiation(LL a, LL n, LL m) 19 | { 20 | LL ret=1, c=a; 21 | while(n) 22 | { 23 | if(n&1) ret=ModularMultiplication(ret, c, m); 24 | n>>=1; c=ModularMultiplication(c, c, m); 25 | } 26 | return ret; 27 | } 28 | bool Witness(LL a, LL n) 29 | { 30 | LL u=n-1; 31 | int t=0; 32 | while(!(u&1)){u>>=1; t++;} 33 | 34 | LL x0=ModularExponentiation(a, u, n), x1; 35 | for(int i=1;i<=t;i++) 36 | { 37 | x1=ModularMultiplication(x0, x0, n); 38 | if(x1==1 && x0!=1 && x0!=n-1) return true; 39 | x0=x1; 40 | } 41 | if(x0!=1) return true; 42 | return false; 43 | } 44 | LL Random(LL n) 45 | { 46 | LL ret=rand(); ret*=32768; 47 | ret+=rand(); ret*=32768; 48 | ret+=rand(); ret*=32768; 49 | ret+=rand(); 50 | return ret%n; 51 | } 52 | bool IsPrimeFast(LL n, int TRIAL) 53 | { 54 | if(n == 1)return false; 55 | if(n == 2)return true; 56 | while(TRIAL--) 57 | { 58 | LL a=Random(n-2)+1; 59 | if(Witness(a, n)) return false; 60 | } 61 | return true; 62 | } 63 | 64 | LL SQRT(LL n) 65 | { 66 | LL lo = 0,hi = 1e9,mid,ans; 67 | while(lo <= hi){ 68 | mid = (lo + hi)/2; 69 | if(mid * mid <= n){ 70 | lo = mid + 1; 71 | ans = mid; 72 | }else { 73 | hi = mid - 1; 74 | } 75 | } 76 | return ans; 77 | } 78 | int main() 79 | { 80 | srand(time(NULL)); 81 | LL n; 82 | cin >> n; 83 | LL ret = 1; 84 | for(int i = 2;i <= 2e6;i++){ 85 | LL cnt = 0; 86 | while(n % i == 0){ 87 | cnt++; 88 | n/=i; 89 | } 90 | if(cnt > 0)ret = ret * (cnt + 1); 91 | } 92 | 93 | if(n == 1); 94 | else if(IsPrimeFast(n,1)){ 95 | ret = ret * 2; 96 | }else{ 97 | LL sq = SQRT(n); 98 | 99 | if(sq * sq == n)ret = ret * 3; 100 | else ret = ret * 2 * 2; 101 | } 102 | cout << ret << "\n"; 103 | } 104 | -------------------------------------------------------------------------------- /Template Codes/Number Theory/Pollard Rho.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define LL long long 3 | 4 | using namespace std; 5 | int main (int argc, char *argv[]) 6 | { 7 | srand(time(NULL)); 8 | LL number = 1000000009LL * 100000007, loop = 1, count; 9 | LL x_fixed = 2, x = 2, size = 2, factor; 10 | LL iterations = 0; 11 | do { 12 | // printf("---- loop %4i ----\n", loop); 13 | count = size; 14 | do { 15 | iterations++; 16 | x = (x * x + 1) % number; 17 | factor = __gcd(abs(x - x_fixed), number); 18 | // printf("count = %4i x = %6i factor = %i\n", size - count + 1, x, factor); 19 | } while (--count && (factor == 1)); 20 | size *= 2; 21 | x_fixed = x; 22 | loop = loop + 1; 23 | } while (factor == 1); 24 | printf("%d\n",iterations); 25 | printf("factor is %i\n", factor); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Template Codes/Number of Subsequences of length K SPOJ INCSEQ.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i1;r--){ 64 | update(r,x+1,query(r-1,x)); 65 | } 66 | update(1,x+1,1); 67 | } 68 | printf("%lld\n",query(k,N)); 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Template Codes/PolynomialOperations.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | typedef long long ll; 6 | 7 | const int N = 155; 8 | const int MOD = 1e9 + 7; 9 | 10 | struct polynomial { 11 | int deg; 12 | ll coeff[N]; 13 | 14 | polynomial () { 15 | deg = 0; 16 | memset(coeff, 0, sizeof coeff); 17 | } 18 | }; 19 | 20 | polynomial f, g; 21 | 22 | ll bigMod (ll a, ll e) { 23 | if (e == -1) e = MOD - 2; 24 | e %= (MOD - 1); 25 | ll r = 1; 26 | while (e) { 27 | if (e & 1) r = (r * a) % MOD; 28 | a = (a * a) % MOD; 29 | e >>= 1; 30 | } 31 | return r; 32 | } 33 | 34 | polynomial product (polynomial f, polynomial g) { 35 | polynomial h; 36 | h.deg = f.deg + g.deg; 37 | 38 | for (int i = 0; i <= f.deg; ++i) 39 | for (int j = 0; j <= g.deg; ++j) 40 | h.coeff[i + j] += f.coeff[i] * g.coeff[j], h.coeff[i + j] %= MOD; 41 | 42 | return h; 43 | } 44 | 45 | // Assuming deg f >= deg g 46 | polynomial quotient (polynomial f, polynomial g) { 47 | polynomial q; 48 | q.deg = f.deg - g.deg; 49 | 50 | for (int i = q.deg; i >= 0; --i) { 51 | q.coeff[i] = (f.coeff[g.deg + i] * bigMod(g.coeff[g.deg], -1)) % MOD; 52 | for (int j = g.deg; j >= 0; --j) 53 | f.coeff[i + j] -= q.coeff[i] * g.coeff[j], f.coeff[i + j] %= MOD; 54 | } 55 | 56 | return q; 57 | } 58 | 59 | polynomial remainder (polynomial f, polynomial g) { 60 | if (f.deg < g.deg) return f; 61 | 62 | for (int i = f.deg - g.deg; i >= 0; --i) { 63 | ll c = (f.coeff[g.deg + i] * bigMod(g.coeff[g.deg], -1)) % MOD; 64 | for (int j = g.deg; j >= 0; --j) 65 | f.coeff[i + j] -= c * g.coeff[j], f.coeff[i + j] %= MOD; 66 | } 67 | 68 | f.deg = g.deg - 1; 69 | while (f.coeff[f.deg] == 0) --f.deg; 70 | f.deg = max(f.deg, 0); 71 | return f; 72 | } 73 | 74 | int n, tot; 75 | 76 | // Euclidean Algorithm 77 | polynomial gcd (polynomial f, polynomial g) { 78 | if (g.deg == 0 and g.coeff[0] == 0) return f; 79 | return ++tot, gcd(g, remainder(f, g)); 80 | } 81 | 82 | int get (void) { 83 | return (rand() % 3) - 1; 84 | } 85 | 86 | void print (void) { 87 | assert(f.deg > g.deg); 88 | cout << f.deg << '\n'; 89 | for (int i = 0; i <= f.deg; ++i) { 90 | cout << f.coeff[i] << " "; 91 | } 92 | cout << '\n'; 93 | cout << g.deg << '\n'; 94 | for (int i = 0; i <= g.deg; ++i) { 95 | cout << g.coeff[i] << " "; 96 | } 97 | cout << '\n'; 98 | } 99 | 100 | int main() { 101 | srand(time(0)); 102 | cin >> n; 103 | while (true) { 104 | f.deg = n, g.deg = n - 1; 105 | f.coeff[n] = g.coeff[n - 1] = 1; 106 | for (int i = 0; i < n; ++i) { 107 | f.coeff[i] = get(); 108 | } 109 | for (int i = 0; i < n - 1; ++i) { 110 | g.coeff[i] = get(); 111 | } 112 | tot = 0; 113 | gcd(f, g); 114 | if (tot == n) { 115 | print(); 116 | return 0; 117 | } 118 | } 119 | assert(false); 120 | return 0; 121 | } 122 | -------------------------------------------------------------------------------- /Template Codes/Polynomial_Multiplication.cpp: -------------------------------------------------------------------------------- 1 | //Codeforces 451E 2 | #include 3 | 4 | using namespace std; 5 | 6 | #define fRead(x) freopen(x,"r",stdin) 7 | #define fWrite(x) freopen (x,"w",stdout) 8 | 9 | #define LL long long 10 | #define ULL unsigned long long 11 | #define ff first 12 | #define ss second 13 | #define pb push_back 14 | #define INF 2e16 15 | #define PI acos(-1.0) 16 | #define mk make_pair 17 | #define pii pair 18 | #define pll pair 19 | 20 | 21 | #define min3(a,b,c) min(a,min(b,c)) 22 | #define max3(a,b,c) max(a,max(b,c)) 23 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 24 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 25 | #define SQR(a) ((a)*(a)) 26 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 27 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 28 | #define REP(i,b) for(int i=0;i >vec; 40 | const LL MOD = 1e9 + 7; 41 | vector polymul(vectorv1,vectorv2) 42 | { 43 | mapmp; 44 | for(int i = 0;i < v1.size();i++){ 45 | for(int j = 0;j < v2.size();j++){ 46 | LL pw = v1[i].second + v2[j].second; 47 | LL cof = (v1[i].first * v2[j].first ) % MOD; 48 | mp[pw] += cof; 49 | mp[pw] %= MOD; 50 | } 51 | } 52 | vectorv; 53 | for(pll i : mp)v.push_back(mk(i.second % MOD,i.first)); 54 | return v; 55 | } 56 | inline LL BigMod(LL B,LL P,LL M){LL R=1;while(P>0){if(P%2==1){R=(R*B)%M;}P/=2;B=(B*B)%M;}return R;} 57 | 58 | LL COM(LL a,LL b) 59 | { 60 | LL ret = 1; 61 | for(LL i = b + 1;i <= a;i++){ 62 | ret = (ret * (i % MOD) ) % MOD; 63 | } 64 | LL down = 1; 65 | for(int i = 1;i <= a - b;i++){ 66 | down = (down * (i % MOD)) % MOD; 67 | } 68 | ret = (ret * BigMod(down,MOD-2,MOD)) % MOD; 69 | return ret; 70 | } 71 | int main() 72 | { 73 | FastRead 74 | cin >> n >> s; 75 | REP(i,n)cin >> F[i]; 76 | 77 | for(int i = 0;i < n;i++){ 78 | vectorv; 79 | v.push_back(mk(1,0)); 80 | v.push_back(mk(-1,F[i] + 1)); 81 | vec.push_back(v); 82 | } 83 | while(vec.size() > 1){ 84 | vectorv1 = vec.back(); 85 | vec.pop_back(); 86 | vectorv2 = vec.back(); 87 | vec.pop_back(); 88 | vec.push_back(polymul(v1,v2)); 89 | } 90 | vectorv = vec.back(); 91 | 92 | LL ans = 0; 93 | for(int i = 0;i < v.size();i++){ 94 | LL pw = v[i].second; 95 | LL cof = v[i].first; 96 | if(pw > s)continue; 97 | LL need = s - pw; 98 | LL here = COM(n + need - 1,need); 99 | ans = ans + (here * cof) % MOD; 100 | ans %= MOD; 101 | } 102 | ans += MOD; 103 | ans %= MOD; 104 | cout << ans << "\n"; 105 | 106 | } 107 | 108 | -------------------------------------------------------------------------------- /Template Codes/SOS DP.cpp: -------------------------------------------------------------------------------- 1 | //Codeforces 165E 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | #define fRead(x) freopen(x,"r",stdin) 8 | #define fWrite(x) freopen (x,"w",stdout) 9 | 10 | #define LL long long 11 | #define ULL unsigned long long 12 | #define ff first 13 | #define ss second 14 | #define pb push_back 15 | #define INF 5e13 16 | #define PI acos(-1.0) 17 | #define mk make_pair 18 | #define pii pair 19 | #define pll pair 20 | #define all(a) a.begin(),a.end() 21 | #define Unique(a) sort(all(a)),a.erase(unique(all(a)),a.end()) 22 | 23 | #define min3(a,b,c) min(a,min(b,c)) 24 | #define max3(a,b,c) max(a,max(b,c)) 25 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 26 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 27 | #define SQR(a) ((a)*(a)) 28 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 29 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 30 | #define REP(i,b) for(int i=0;i 0){ 54 | F[mask] = F[mask^(1< 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;iG[N]; 48 | mapmp[N]; 49 | 50 | int n,color[N],id[N],maxcount[N]; 51 | LL answer[N],cnt[N]; 52 | 53 | void update(int x,int counter,int color) 54 | { 55 | if(counter>maxcount[x])maxcount[x]=counter,cnt[x]=0; 56 | if(counter==maxcount[x])cnt[x]+=color; 57 | } 58 | void merge(int &x,int y) 59 | { 60 | if(mp[x].size()first]+=it->second; 63 | update(x,mp[x][it->first],it->first); 64 | } 65 | } 66 | void dfs(int node,int pre) 67 | { 68 | id[node]=node; 69 | mp[node][color[node]]=1; 70 | cnt[node] = color[node]; 71 | maxcount[node]=1; 72 | 73 | for(int i : G[node]){ 74 | if(i==pre)continue; 75 | dfs(i,node); 76 | merge(id[node],id[i]); 77 | } 78 | answer[node] = cnt[id[node]]; 79 | } 80 | int main() 81 | { 82 | scanf("%d",&n); 83 | FOR(i,1,n)scanf("%d",&color[i]); 84 | 85 | FOR(i,1,n-1){ 86 | int a,b; 87 | scanf("%d %d",&a,&b); 88 | G[a].pb(b); 89 | G[b].pb(a); 90 | } 91 | dfs(1,0); 92 | FOR(i,1,n)printf("%lld ",answer[i]); 93 | } 94 | -------------------------------------------------------------------------------- /Template Codes/String Algorithms/SuffixArrayWithLCP.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | struct suffix 5 | { 6 | int index; 7 | int rank[2]; 8 | }; 9 | 10 | 11 | int cmp(struct suffix a, struct suffix b) 12 | { 13 | return (a.rank[0] == b.rank[0])? (a.rank[1] < b.rank[1] ?1: 0): 14 | (a.rank[0] < b.rank[0] ?1: 0); 15 | } 16 | 17 | 18 | vector buildSuffixArray(string txt, int n) 19 | { 20 | struct suffix suffixes[n]; 21 | 22 | for (int i = 0; i < n; i++) 23 | { 24 | suffixes[i].index = i; 25 | suffixes[i].rank[0] = txt[i] - 'a'; 26 | suffixes[i].rank[1] = ((i+1) < n)? (txt[i + 1] - 'a'): -1; 27 | } 28 | sort(suffixes, suffixes+n, cmp); 29 | 30 | 31 | int ind[n]; 32 | 33 | for (int k = 4; k < 2*n; k = k*2) 34 | { 35 | int rank = 0; 36 | int prev_rank = suffixes[0].rank[0]; 37 | suffixes[0].rank[0] = rank; 38 | ind[suffixes[0].index] = 0; 39 | 40 | for (int i = 1; i < n; i++) 41 | { 42 | if (suffixes[i].rank[0] == prev_rank && 43 | suffixes[i].rank[1] == suffixes[i-1].rank[1]) 44 | { 45 | prev_rank = suffixes[i].rank[0]; 46 | suffixes[i].rank[0] = rank; 47 | } 48 | else 49 | { 50 | prev_rank = suffixes[i].rank[0]; 51 | suffixes[i].rank[0] = ++rank; 52 | } 53 | ind[suffixes[i].index] = i; 54 | } 55 | 56 | for (int i = 0; i < n; i++) 57 | { 58 | int nextindex = suffixes[i].index + k/2; 59 | suffixes[i].rank[1] = (nextindex < n)? 60 | suffixes[ind[nextindex]].rank[0]: -1; 61 | } 62 | sort(suffixes, suffixes+n, cmp); 63 | } 64 | 65 | vectorsuffixArr; 66 | for (int i = 0; i < n; i++) 67 | suffixArr.push_back(suffixes[i].index); 68 | 69 | return suffixArr; 70 | } 71 | 72 | vector kasai(string txt, vector suffixArr) 73 | { 74 | int n = suffixArr.size(); 75 | 76 | vector lcp(n, 0); 77 | vector invSuff(n, 0); 78 | 79 | for (int i=0; i < n; i++) 80 | invSuff[suffixArr[i]] = i; 81 | 82 | int k = 0; 83 | 84 | for (int i=0; i0)k--; 99 | } 100 | 101 | return lcp; 102 | } 103 | 104 | 105 | 106 | void printArr(vectorarr, int n) 107 | { 108 | for (int i = 0; i < n; i++) 109 | cout << arr[i] << " "; 110 | cout << endl; 111 | } 112 | int main() 113 | { 114 | string str = "banana"; 115 | 116 | vectorsuffixArr = buildSuffixArray(str, str.length()); 117 | int n = suffixArr.size(); 118 | 119 | cout << "Suffix Array : \n"; 120 | printArr(suffixArr, n); 121 | 122 | vectorlcp = kasai(str, suffixArr); 123 | 124 | cout << "\nLCP Array : \n"; 125 | printArr(lcp, n); 126 | return 0; 127 | } 128 | -------------------------------------------------------------------------------- /Template Codes/String Algorithms/gg.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | 17 | #define min3(a,b,c) min(a,min(b,c)) 18 | #define max3(a,b,c) max(a,max(b,c)) 19 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 20 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 21 | #define SQR(a) ((a)*(a)) 22 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 23 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 24 | #define REP(i,b) for(int i=0;i *adj; 50 | bool isCyclicUtil(int v, bool visited[], bool *rs); 51 | public: 52 | Graph(int V); 53 | void addEdge(int v, int w); 54 | void removeEdge(int v,int w); 55 | bool isCyclic(); 56 | }; 57 | 58 | Graph::Graph(int V) 59 | { 60 | this->V = V; 61 | adj = new set[V]; 62 | } 63 | 64 | void Graph::addEdge(int v, int w) 65 | { 66 | adj[v].insert(w); 67 | } 68 | 69 | void Graph::removeEdge(int v,int w) 70 | { 71 | adj[v].erase(adj[v].find(w)); 72 | } 73 | 74 | bool Graph::isCyclicUtil(int v, bool visited[], bool *recStack) 75 | { 76 | if(visited[v] == false) 77 | { 78 | visited[v] = true; 79 | recStack[v] = true; 80 | 81 | for(auto i = adj[v].begin(); i != adj[v].end(); ++i) 82 | { 83 | if ( !visited[*i] && isCyclicUtil(*i, visited, recStack) ) 84 | return true; 85 | else if (recStack[*i]) 86 | return true; 87 | } 88 | 89 | } 90 | recStack[v] = false; 91 | return false; 92 | } 93 | 94 | 95 | bool Graph::isCyclic() 96 | { 97 | bool *visited = new bool[V]; 98 | bool *recStack = new bool[V]; 99 | for(int i = 0; i < V; i++) 100 | { 101 | visited[i] = false; 102 | recStack[i] = false; 103 | } 104 | 105 | 106 | for(int i = 0; i < V; i++) 107 | if (isCyclicUtil(i, visited, recStack)) 108 | return true; 109 | 110 | return false; 111 | } 112 | 113 | int main() 114 | { 115 | int t; 116 | cin >> t; 117 | while(t--){ 118 | int n , m; 119 | cin >> n >> m; 120 | Graph g(n); 121 | vector>edge; 122 | for(int i = 0;i < m;i++){ 123 | int a,b; 124 | cin >> a >> b; 125 | a--;b--; 126 | swap(a,b); 127 | edge.push_back(mk(a,b)); 128 | g.addEdge(a,b); 129 | } 130 | bool found = 0; 131 | if(g.isCyclic())found = 1; 132 | 133 | for(int i = 0;i < edge.size();i++){ 134 | if(found)break; 135 | pair P = edge[i]; 136 | g.removeEdge(P.first,P.second); 137 | if(g.isCyclic())found = 1; 138 | g.addEdge(P.first,P.second); 139 | } 140 | if(found)cout << "Yes\n"; 141 | else cout << "No\n"; 142 | 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /Template Codes/SuffixArray.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | using namespace std; 5 | 6 | 7 | struct suffix 8 | { 9 | int index; 10 | int Rank[2]; 11 | }; 12 | 13 | 14 | int cmp(struct suffix a, struct suffix b) 15 | { 16 | return (a.Rank[0] == b.Rank[0])? (a.Rank[1] < b.Rank[1] ?1: 0): 17 | (a.Rank[0] < b.Rank[0] ?1: 0); 18 | } 19 | 20 | int *buildSuffixArray(char *txt, int n) 21 | { 22 | 23 | struct suffix suffixes[n]; 24 | 25 | 26 | for (int i = 0; i < n; i++) 27 | { 28 | suffixes[i].index = i; 29 | suffixes[i].Rank[0] = txt[i] - 'a'; 30 | suffixes[i].Rank[1] = ((i+1) < n)? (txt[i + 1] - 'a'): -1; 31 | } 32 | 33 | sort(suffixes, suffixes+n, cmp); 34 | 35 | int ind[n]; 36 | for (int k = 4; k < 2*n; k = k*2) 37 | { 38 | 39 | int Rank = 0; 40 | int prev_rank = suffixes[0].Rank[0]; 41 | suffixes[0].Rank[0] = Rank; 42 | ind[suffixes[0].index] = 0; 43 | 44 | for (int i = 1; i < n; i++) 45 | { 46 | if (suffixes[i].Rank[0] == prev_rank && 47 | suffixes[i].Rank[1] == suffixes[i-1].Rank[1]) 48 | { 49 | prev_rank = suffixes[i].Rank[0]; 50 | suffixes[i].Rank[0] = Rank; 51 | } 52 | else 53 | { 54 | prev_rank = suffixes[i].Rank[0]; 55 | suffixes[i].Rank[0] = ++Rank; 56 | } 57 | ind[suffixes[i].index] = i; 58 | } 59 | 60 | for (int i = 0; i < n; i++) 61 | { 62 | int nextindex = suffixes[i].index + k/2; 63 | suffixes[i].Rank[1] = (nextindex < n)? 64 | suffixes[ind[nextindex]].Rank[0]: -1; 65 | } 66 | 67 | sort(suffixes, suffixes+n, cmp); 68 | } 69 | 70 | int *suffixArr = new int[n]; 71 | for (int i = 0; i < n; i++) 72 | suffixArr[i] = suffixes[i].index; 73 | 74 | 75 | return suffixArr; 76 | } 77 | 78 | char str[40005]; 79 | int main() 80 | { 81 | int t; 82 | scanf("%d",&t); 83 | 84 | while(t--){ 85 | scanf("%s",str); 86 | int len = strlen(str); 87 | for(int i = 0;i < len;i++)str[i + len] = str[i]; 88 | str[2 * len] = 'z'; 89 | int *ara = buildSuffixArray(str,2 * len + 1); 90 | // for(int i = 0;i < 2 * len;i++)cout << ara[i] << " "; 91 | // cout << endl; 92 | 93 | int ans = 0; 94 | for(int i = 0;i <= 2 * len;i++){ 95 | if(ara[i] < len){ 96 | ans = ara[i]; 97 | break; 98 | } 99 | } 100 | printf("%d\n",ans + 1); 101 | } 102 | return 0; 103 | } 104 | -------------------------------------------------------------------------------- /Template Codes/Tree Dp 766E.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 5e13 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | #define all(a) a.begin(),a.end() 19 | #define Unique(a) sort(all(a)),a.erase(unique(all(a)),a.end()) 20 | 21 | #define min3(a,b,c) min(a,min(b,c)) 22 | #define max3(a,b,c) max(a,max(b,c)) 23 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 24 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 25 | #define SQR(a) ((a)*(a)) 26 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 27 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 28 | #define REP(i,b) for(int i=0;iG[100005]; 40 | int dp[100005][24][2]; 41 | int n; 42 | int ara[100005]; 43 | LL mul[24]; 44 | int nob = 23; 45 | void dfs(int u,int pre) 46 | { 47 | for(int v : G[u]){ 48 | if(v==pre)continue; 49 | dfs(v,u); 50 | 51 | for(int i = 0;i < nob;i++){ 52 | int bit = Check(ara[u],i); 53 | 54 | mul[i] += dp[u][i][0] * dp[v][i][1]; 55 | mul[i] += dp[u][i][1] * dp[v][i][0]; 56 | // cout << "from to " << u << " " << v << endl; 57 | // cout << dp[u][i][0] << " " << dp[v][i][1] << " "; 58 | // cout << dp[u][i][1] << " " << dp[v][i][0] << "\n"; 59 | if(bit == 0){ 60 | dp[u][i][0] += dp[v][i][0]; 61 | dp[u][i][1] += dp[v][i][1]; 62 | }else{ 63 | dp[u][i][0] += dp[v][i][1]; 64 | dp[u][i][1] += dp[v][i][0]; 65 | } 66 | } 67 | } 68 | for(int i = 0;i < nob;i++){ 69 | if(Check(ara[u],i))dp[u][i][1] += 1; 70 | else dp[u][i][0] += 1; 71 | } 72 | for(int i = 0;i < nob;i++){ 73 | mul[i] += dp[u][i][1]; 74 | } 75 | 76 | } 77 | int main() 78 | { 79 | scanf("%d",&n); 80 | for(int i = 1;i<=n;i++)scanf("%d",&ara[i]); 81 | FOR(i,1,n-1) 82 | { 83 | int a,b; 84 | scanf("%d %d",&a,&b); 85 | G[a].pb(b); 86 | G[b].pb(a); 87 | } 88 | dfs(1,0); 89 | LL ans = 0; 90 | for(int i = 0;i 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | #define pii pair 17 | #define pll pair 18 | 19 | 20 | #define min3(a,b,c) min(a,min(b,c)) 21 | #define max3(a,b,c) max(a,max(b,c)) 22 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 23 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 24 | #define SQR(a) ((a)*(a)) 25 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 26 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 27 | #define REP(i,b) for(int i=0;i= 0;i--){ 41 | bool d = num & (1 << i); 42 | if(trie[row][d] == 0){ 43 | trie[row][d] = ++id; 44 | } 45 | row = trie[row][d]; 46 | } 47 | } 48 | int search(int num,int row) 49 | { 50 | int val = 0; 51 | for(int i = 20;i >= 0;i--){ 52 | bool d = num & (1 << i); 53 | if(trie[row][1 - d]){ 54 | row = trie[row][1 - d]; 55 | val = val | (1 << i); 56 | }else{ 57 | row = trie[row][d]; 58 | } 59 | } 60 | 61 | return val; 62 | } 63 | 64 | int n , q , ara[N]; 65 | 66 | void build(int node,int L,int R) 67 | { 68 | for(int i = L;i <= R;i++)insert(ara[i],node); 69 | 70 | if(L == R)return; 71 | int mid = (L + R)/2; 72 | build(2 * node,L,mid); 73 | build(2 * node + 1,mid + 1,R); 74 | } 75 | int query(int node,int L,int R,int l,int r,int x) 76 | { 77 | if(R < l or r < L)return 0; 78 | if(L >= l and R <= r){ 79 | return search(x,node); 80 | } 81 | int mid = (L + R)/2; 82 | int a = query(2 * node,L,mid,l,r,x); 83 | int b = query(2 * node + 1,mid + 1,R,l,r,x); 84 | return max(a,b); 85 | } 86 | 87 | int main() 88 | { 89 | scanf("%d",&n); 90 | FOR(i,1,n)scanf("%d",&ara[i]); 91 | build(1,1,n); 92 | scanf("%d",&q); 93 | while(q--){ 94 | int l , r , x; 95 | scanf("%d %d %d",&l,&r,&x); 96 | printf("%d\n",query(1,1,n,l,r,x)); 97 | } 98 | 99 | } 100 | -------------------------------------------------------------------------------- /Template Codes/ZAlgorithm.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | #define fRead(x) freopen(x,"r",stdin) 6 | #define fWrite(x) freopen (x,"w",stdout) 7 | 8 | #define LL long long 9 | #define ULL unsigned long long 10 | #define ff first 11 | #define ss second 12 | #define pb push_back 13 | #define INF 2e16 14 | #define PI acos(-1.0) 15 | #define mk make_pair 16 | 17 | #define min3(a,b,c) min(a,min(b,c)) 18 | #define max3(a,b,c) max(a,max(b,c)) 19 | #define min4(a,b,c,d) min(a,min(b,min(c,d))) 20 | #define max4(a,b,c,d) max(a,max(b,max(c,d))) 21 | #define SQR(a) ((a)*(a)) 22 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 23 | #define ROF(i,a,b) for(int i=a;i>=b;i--) 24 | #define REP(i,b) for(int i=0;i R){ 52 | L = R = i; 53 | while (R> n >> m; 74 | cin >> str; 75 | Function(); 76 | FOR(i,1,m)cin >> ara[i]; 77 | 78 | // for(int i = 0;i < str.size();i++)cout << Z[i] << " "; 79 | // cout << endl; 80 | for(int i = 2;i <= m;i++){ 81 | int a = ara[i-1]; 82 | int b = ara[i]; 83 | int len = b - a; 84 | int baki = str.size() - len; 85 | 86 | if(baki > Z[len]){ 87 | cout << 0 << endl; 88 | return 0; 89 | } 90 | } 91 | LL MOD = 1e9 + 7; 92 | for(int i = 1;i <= m;i++){ 93 | got[ara[i]]++; 94 | got[ara[i]+str.size()]--; 95 | } 96 | int s = 0; 97 | LL ans = 1; 98 | for(int i = 1;i <= n;i++){ 99 | s = s + got[i]; 100 | if(s == 0)ans = (ans * 26) % MOD; 101 | } 102 | cout << ans << endl; 103 | } 104 | -------------------------------------------------------------------------------- /UVA/100 - The 3n + 1 problem.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int dp[100000005]; 10 | 11 | int main() 12 | { 13 | int i,j; 14 | while( scanf ("%d %d", &i, &j) != EOF ) 15 | { 16 | int temp_i=i; 17 | int temp_j=j; 18 | 19 | if(i>j)swap(i,j); 20 | 21 | int len,maxlen=0; 22 | 23 | while(i<=j) 24 | { 25 | unsigned int n=i; 26 | len=1; 27 | 28 | 29 | int store=n; 30 | while(n!=1) 31 | { 32 | if(n<=100000000)if(dp[n]!=0) 33 | { 34 | len+= dp[n]-1; 35 | break; 36 | } 37 | if(n % 2==0)n = n >> 1; 38 | else n = 3*n+1; 39 | len++; 40 | 41 | } 42 | dp[store]=len; 43 | maxlen = max(maxlen,len); 44 | i++; 45 | } 46 | 47 | printf ("%d %d %d\n", temp_i, temp_j, maxlen); 48 | } 49 | 50 | 51 | 52 | return 0; 53 | } 54 | -------------------------------------------------------------------------------- /UVA/102 - Ecological Bin Packing.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int main() 10 | { 11 | int b1,g1,c1,b2,g2,c2,b3,g3,c3; 12 | while(scanf("%d %d %d %d %d %d %d %d %d",&b1,&g1,&c1,&b2,&g2,&c2,&b3,&g3,&c3)!=EOF) 13 | { 14 | int ans1 = b2+b3+c1+c3+g1+g2; 15 | int ans2 = b2+b3+g1+g3+c1+c2; 16 | int ans3 = c2+c3+b1+b3+g1+g2; 17 | int ans4 = c2+c3+g1+g3+b1+b2; 18 | int ans5 = g2+g3+b1+b3+c1+c2; 19 | int ans6 = g2+g3+c1+c3+b1+b2; 20 | 21 | int ans=min(ans1,ans2); 22 | ans = min(ans,ans3); 23 | ans = min(ans,ans4); 24 | ans = min(ans,ans5); 25 | ans = min(ans,ans6); 26 | 27 | if(ans==ans1)printf("BCG %d\n",ans); 28 | else if(ans==ans2)printf("BGC %d\n",ans); 29 | else if(ans==ans3)printf("CBG %d\n",ans); 30 | else if(ans==ans4)printf("CGB %d\n",ans); 31 | else if(ans==ans5)printf("GBC %d\n",ans); 32 | else if(ans==ans6)printf("GCB %d\n",ans); 33 | } 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /UVA/136 - Ugly Numbers.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int main() 10 | { 11 | printf("The 1500'th ugly number is 859963392.\n"); 12 | 13 | return 0; 14 | } 15 | -------------------------------------------------------------------------------- /UVA/151 - Power Crisis.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int main() 10 | { 11 | unsigned short int n; 12 | 13 | while(scanf("%hu",&n)) 14 | { 15 | if(n==0)break; 16 | 17 | int i,ans; 18 | for(i=1;i 2 | 3 | using namespace std; 4 | 5 | int main() 6 | { 7 | //freopen("in.txt", "r", stdin); 8 | 9 | int m,n,counter; 10 | 11 | while(scanf("%d %d", &m, &n)) 12 | { 13 | if(m==0 && n==0)break; 14 | 15 | if(n==1)counter=m; 16 | else if(m==1)counter=n; 17 | else if(n==2) 18 | { 19 | int div = m/4; 20 | counter=div*4; 21 | 22 | if(m%4==1)counter+=2; 23 | else if(m%4>1)counter+=4; 24 | } 25 | else if(m==2) 26 | { 27 | int div = n/4; 28 | counter=div*4; 29 | 30 | if(n%4==1)counter+=2; 31 | else if(n%4>1)counter+=4; 32 | } 33 | else 34 | { 35 | counter = (m*n+1)/2; 36 | } 37 | printf("%d knights may be placed on a %d row %d column board.\n",counter,m,n); 38 | } 39 | 40 | return 0; 41 | } 42 | --------------------------------------------------------------------------------