├── BINARY SEARCH ├── README.MD ├── step1 │ ├── A.cpp │ ├── B.cpp │ ├── C.cpp │ └── D.cpp ├── step2 │ ├── A.cpp │ ├── B.cpp │ ├── C.cpp │ ├── D.cpp │ ├── E.cpp │ ├── F.cpp │ ├── G.cpp │ └── H.cpp ├── step3 │ ├── A.cpp │ ├── B.cpp │ └── C.cpp └── step4 │ └── A.cpp ├── CSES Additional Problems ├── 1087-ShortestSubsequence.cpp └── 1146_CountingBits.cpp ├── CSES INTRODUCTORY ├── 1068-WeiredAlgorithm.cpp ├── 1069-Repetitions.cpp ├── 1083-MissingNumber.cpp ├── 1094-IncreasingArray.cpp └── 1625 Grid_Path.cpp ├── CSES TREES ├── 1130-TreeMatching.cpp ├── 1131-TreeDiameter.cpp ├── 1132-TreeDistance-I(method -1).cpp ├── 1133-TreeDistanceII.cpp ├── 1135-DistanceQueries.cpp ├── 1136-CountingPaths.cpp ├── 1137-SubtreeQueries.cpp ├── 1674-subordinates.cpp ├── 1687 company-queries1.cpp └── 1688-Company Queries II.cpp ├── DP ├── 1.cpp ├── 2.cpp ├── 3.cpp ├── 4.cpp ├── 5.cpp ├── 6.cpp ├── DP-bitmasking │ ├── README.MD │ ├── leetcodemincost2connectpoints.cpp │ ├── sol1.cpp │ └── solkickstart.cpp ├── README.MD ├── cses dp │ ├── 1093-TwoSetsII.cp │ ├── 1097-RemovalGames.cpp │ ├── 1140-Projects.cpp │ ├── 1145-IncreasingSubsequence.cpp │ ├── 1158-BookShop.cpp │ ├── 1633-DiceCombinations.cpp │ ├── 1634-MinimizingCoins.cpp │ ├── 1635-CoinCombinations.cpp │ ├── 1636-CoinCombinationII.cpp │ ├── 1637-RemoveDigits.cpp │ ├── 1638-GridPaths.cpp │ ├── 1639-EditDistance.cpp │ ├── 1653-ElevatorRide.cpp │ ├── 1744-ReactangularCutting.cpp │ ├── 1745-MoneySum.cpp │ ├── 1746-Arraydescription.cpp │ ├── 2181-CountingTilings.cpp │ ├── 2220-CountingNumbers.cpp │ └── 2413-CountingTowers.cpp └── digit-dp │ ├── README.MD │ ├── kickstartroundA22problemD.cpp │ ├── soln1usingP&C.cpp │ └── soln1usingdigitdp.cpp ├── Google Online Coding Challenge 2022 └── problem1.cpp ├── Interactive problems ├── 1.cpp ├── 10.cpp ├── 11.cpp ├── 12.cpp ├── 2.cpp ├── 3.cpp ├── 4.cpp ├── 5.cpp ├── 7.cpp ├── 8.cpp ├── 9.cpp └── README.MD ├── RANGE Queries ├── README.MD └── cses │ ├── 1143-HotelQueries.cpp │ ├── 1190-SubarraySumQueries.cpp │ ├── 1646-staticRangeSumQueries.cpp │ ├── 1647-StaticRangeMinQueries.cpp │ ├── 1648-DynamicRangeSumQueries.cpp │ ├── 1649-DynamicRangeMinQueries.cpp │ ├── 1650-RangeXorQueries.cpp │ ├── 1651-RangeUpdateQueries.cpp │ ├── 1652-ForestQueries.cpp │ ├── 1749-ListRemovals.cpp │ ├── 2166-PrefixSumQueries.cpp │ └── 2206-PizzeriaQueries.cpp ├── README.md ├── String Algorithms ├── CSES │ ├── 1731-WordCombinations.cpp │ ├── 1732-FindingBorders.cpp │ ├── 1733-FindingPeriods.cpp │ └── 1753-StringMatching.cpp └── README.MD ├── Templates ├── SieveOfEratosthenes ├── binar_lifting.cpp ├── ext_gcd.cpp ├── nCr-2.cpp ├── nCr-main ├── nCr.cpp └── segtree.cpp ├── cses graph ├── 1192 CountingRooms.cpp ├── 1193 Labyrinth.cpp ├── 1194 Monsters.cpp ├── 1195 Flight discount.cpp ├── 1196 FlightRoutes.cpp ├── 1197 CycleFinding.cpp ├── 1202 Investigation.cpp ├── 1666 Building Roads.cpp ├── 1667 Message Route.cpp ├── 1669 Round Trip.cpp ├── 1671 Shortest Routes I.cpp ├── 1672 Shortest Routes II.cpp ├── 1673 High_score.cpp ├── 1675-RoadConstruction.cpp ├── 1676-Road Construction.cpp ├── 1679 CouseShedule.cpp ├── 1680 longestFlightRoute(dijkastra).cpp ├── 1680 longestFlightRoute(optimised).cpp ├── 1681 GameRoutes.cpp ├── 1682-FlightRouteCheck.cpp ├── 1683-planets And Kingdoms.cpp ├── 1684-Giant Pizza.cpp ├── 1686 Building Teams.cpp ├── 1686 Coin Collector.cpp ├── 1750 PlanetQueries1.cpp ├── 1751-PlanetsCycles.cpp └── README.MD └── playing with bits └── readme.md /BINARY SEARCH/README.MD: -------------------------------------------------------------------------------- 1 | CodeforcesEDU course:- 2 | https://codeforces.com/edu/course/2/lesson/6 3 | -------------------------------------------------------------------------------- /BINARY SEARCH/step1/A.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // sab moh maya hai.. 6 | 7 | // give me some sunshine, give me some rain, give me another chance to grow up once again 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | bool binarysearch(ll arr[],ll l,ll r,ll val) 15 | { 16 | 17 | if(l>r) 18 | { 19 | return false; 20 | } 21 | ll mid=(l+r)/2; 22 | if(arr[mid]==val) 23 | { 24 | return true; 25 | }else if(arr[mid]>val) 26 | { 27 | return binarysearch(arr,l,mid-1,val); 28 | }else 29 | { 30 | return binarysearch(arr,mid+1,r,val); 31 | } 32 | 33 | } 34 | 35 | int main() 36 | { 37 | ll n,k; 38 | cin>>n>>k; 39 | ll arr[n]; 40 | for(ll i=0;i>arr[i]; 43 | } 44 | while(k--) 45 | { 46 | ll val; 47 | cin>>val; 48 | if(binarysearch(arr,0,n,val)) 49 | { 50 | cout<<"YES"< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll binarysearch(ll arr[],ll l,ll r,ll val) 15 | { 16 | 17 | 18 | ll mid=(l+r)/2; 19 | 20 | if(r-l==1 && arr[mid]<=val) 21 | { 22 | return r; 23 | } 24 | if(r-l==1 && arr[mid]>val) 25 | { 26 | return 0; 27 | } 28 | if(arr[mid]>val) 29 | { 30 | return binarysearch(arr,l,mid,val); 31 | }else if(arr[mid]<=val) 32 | { 33 | return binarysearch(arr,mid,r,val); 34 | } 35 | return 0; 36 | 37 | } 38 | 39 | int main() 40 | { 41 | ll n,k; 42 | cin>>n>>k; 43 | ll arr[n]; 44 | for(ll i=0;i>arr[i]; 47 | } 48 | while(k--) 49 | { 50 | ll val; 51 | cin>>val; 52 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll binarysearch(ll arr[],ll l,ll r,ll val) 15 | { 16 | if(r-l==1) 17 | { 18 | return r+1; 19 | } 20 | ll mid=(l+r)/2; 21 | if(arr[mid]>=val) 22 | { 23 | return binarysearch(arr,l,mid,val); 24 | }else 25 | { 26 | return binarysearch(arr,mid,r,val); 27 | } 28 | // return -1; 29 | 30 | } 31 | 32 | int main() 33 | { 34 | ll n,k; 35 | cin>>n>>k; 36 | ll arr[n]; 37 | for(ll i=0;i>arr[i]; 40 | } 41 | while(k--) 42 | { 43 | ll val; 44 | cin>>val; 45 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll binarysearch1(ll arr[],ll l,ll r,ll val) 15 | { 16 | if(r-l==1) 17 | { 18 | return r+1; 19 | } 20 | ll mid=(l+r)/2; 21 | if(arr[mid]>=val) 22 | { 23 | return binarysearch1(arr,l,mid,val); 24 | }else 25 | { 26 | return binarysearch1(arr,mid,r,val); 27 | } 28 | // return -1; 29 | } 30 | ll binarysearch2(ll arr[],ll l,ll r,ll val) 31 | { 32 | if(r-l==1) 33 | { 34 | return l+1; 35 | } 36 | ll mid=(l+r)/2; 37 | if(arr[mid]>val) 38 | { 39 | return binarysearch2(arr,l,mid,val); 40 | }else 41 | { 42 | return binarysearch2(arr,mid,r,val); 43 | } 44 | // return -1; 45 | } 46 | 47 | 48 | 49 | 50 | int main() 51 | { 52 | ll n,k; 53 | cin>>n; 54 | ll arr[n]; 55 | for(ll i=0;i>arr[i]; 58 | } 59 | sort(arr,arr+n); 60 | cin>>k; 61 | while(k--) 62 | { 63 | ll val1,val2; 64 | cin>>val1>>val2; 65 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll w,h,n; 14 | 15 | bool good(ll x) 16 | { 17 | return (x/w)*(x/h)>=n; 18 | } 19 | 20 | 21 | int main() 22 | { 23 | // ll w,h,n; 24 | cin>>w>>h>>n; 25 | 26 | ll l=0; 27 | ll r=1; 28 | while(!good(r)) 29 | { 30 | r*=2; 31 | } 32 | 33 | while(r>l+1) 34 | { 35 | ll mid=(l+r)/2; 36 | if(good(mid)) 37 | { 38 | r=mid; 39 | }else{ 40 | l=mid; 41 | } 42 | } 43 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll n,k; 14 | 15 | 16 | bool notgood(double x,ll arr[]) 17 | { 18 | ll total=0; 19 | for(ll i=0;i>n>>k; 36 | ll arr[n]; 37 | for(ll i=0;i>arr[i]; 40 | } 41 | 42 | double l=0; 43 | double r=1; 44 | while(!notgood(r,arr)) 45 | { 46 | r*=2; 47 | } 48 | cout << setprecision(20) ; 49 | while(r>l+0.0000001) 50 | { 51 | double mid=(l+r)/2.0; 52 | if(notgood(mid,arr)) 53 | { 54 | r=mid; 55 | }else{ 56 | l=mid; 57 | } 58 | } 59 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll n,x,y; 14 | 15 | 16 | bool good(ll z) 17 | { 18 | return (z/x)+(z/y)>=n-1; 19 | 20 | } 21 | 22 | 23 | int main() 24 | { 25 | // ll w,h,n; 26 | cin>>n>>x>>y; 27 | // n=n+1; 28 | if(n==1) 29 | { 30 | cout<l+1) 41 | { 42 | ll mid=(l+r)/2; 43 | if(good(mid)) 44 | { 45 | r=mid; 46 | }else{ 47 | l=mid; 48 | } 49 | } 50 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll m,n; 14 | ll ans[100005]={0}; 15 | bool good(ll time, ll t[], ll z[] , ll y[]) 16 | { 17 | ll total=0; 18 | for(ll i=0;iz[i]) 23 | { 24 | total+=z[i]; 25 | }else{ 26 | total+=(rem/t[i]); 27 | } 28 | 29 | } 30 | // cout<=m; 33 | 34 | } 35 | 36 | void result(ll time, ll t[], ll z[] , ll y[],ll ans[]) 37 | { 38 | ll total=0; 39 | 40 | for(ll i=0;iz[i]) 45 | { 46 | ans[i]+=z[i]; 47 | }else{ 48 | ans[i]+=(rem/t[i]); 49 | } 50 | total+=ans[i]; 51 | if(total>=m) 52 | { 53 | ans[i]-=(total-m); 54 | return; 55 | } 56 | 57 | } 58 | 59 | 60 | } 61 | 62 | int main() 63 | { 64 | 65 | cin>>m>>n; 66 | ll t[n],z[n],y[n]; 67 | ll mn=INT_MAX; 68 | ll b=0; 69 | for(ll i=0;i>t[i]>>z[i]>>y[i]; 72 | if(mn>t[i]) 73 | { 74 | mn=t[i]; 75 | b=i; 76 | } 77 | } 78 | 79 | // memset(ans,0,sizeof(ans)); 80 | 81 | ll l=-1; 82 | ll r=1e9; 83 | 84 | // cout<<"value of r: "; 85 | // cout<l+1) 88 | { 89 | ll mid=(l+r)/2; 90 | if(good(mid,t,z,y)) 91 | { 92 | r=mid; 93 | }else 94 | { 95 | l=mid; 96 | } 97 | } 98 | result(r,t,z,y,ans); 99 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | double c; 14 | bool good(double root) 15 | { 16 | return root*root + sqrt(root)>=c; 17 | } 18 | 19 | 20 | 21 | int main() 22 | { 23 | 24 | 25 | cin>>c; 26 | 27 | double l=0,r=1.0; 28 | while(!good(r)) 29 | { 30 | r*=2; 31 | } 32 | cout<< setprecision(20); 33 | while(r>l+0.0000001) 34 | { 35 | double mid=(l+r)/2.0; 36 | if(good(mid)) 37 | { 38 | r=mid; 39 | }else{ 40 | l=mid; 41 | } 42 | } 43 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | bool good(ll arr[],ll mid,string t,string p) 15 | { 16 | ll check=p.length(); 17 | ll len=t.length(); 18 | for(ll i=0;i=check); 33 | 34 | } 35 | 36 | 37 | 38 | int main() 39 | { 40 | 41 | string t,p; 42 | cin>>t>>p; 43 | ll len=t.length(); 44 | ll arr[len]; 45 | for(ll i=0;i>arr[i]; 48 | } 49 | ll l=-1,r=len; 50 | // cout<l+1) 52 | { 53 | ll mid=(l+r)/2; 54 | if(good(arr,mid,t,p)) 55 | { 56 | l=mid; 57 | 58 | }else 59 | { 60 | r=mid; 61 | 62 | } 63 | } 64 | // if(good(arr,l,t,p)) 65 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | ll k,n; 17 | cin>>k>>n; 18 | ll arr[n]; 19 | ll sm=0; 20 | for(ll i=0;i>arr[i]; 23 | sm+=arr[i]; 24 | } 25 | sort(arr,arr+n); 26 | 27 | ll r=(sm+k-1)/k; 28 | r++; 29 | ll l=1; 30 | while(l+1 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | ll k,n; 17 | cin>>k>>n; 18 | ll arr[n]; 19 | ll sm=0; 20 | for(ll i=0;i>arr[i]; 23 | sm+=arr[i]; 24 | } 25 | sort(arr,arr+n); 26 | 27 | ll r=1e12; 28 | ll l=1; 29 | ll ans=0; 30 | while(l<=r){ 31 | 32 | 33 | ll mid=(l+r)/2; 34 | 35 | ll req=mid*k; 36 | for(ll i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | double findmx(ll n,vector> vec,double pos) 15 | { 16 | double mn= -DBL_MAX; 17 | double ans; 18 | for(ll i=0;imn) 22 | { 23 | mn=t; 24 | ans=vec[i].first; 25 | } 26 | } 27 | // cout<> vec,double pos) 34 | { 35 | double mn= -DBL_MAX; 36 | double ans; 37 | for(ll i=0;imn) 41 | { 42 | mn=t; 43 | ans=vec[i].first; 44 | } 45 | } 46 | cout<>n; 56 | // double x[n],v[n]; 57 | double l=-1000000000.0,r=1000000000.0; 58 | 59 | vector> vec; 60 | for(ll i=0;i>x>>v; 64 | vec.push_back(make_pair(x,v)); 65 | } 66 | 67 | cout<< setprecision(7); 68 | sort(vec.begin(),vec.end()); 69 | while(r>l+0.0000001) 70 | { 71 | double mid=(l+r)/2.0; 72 | if(findmx(n,vec,mid)<=mid) 73 | { 74 | r=mid; 75 | }else 76 | { 77 | l=mid; 78 | } 79 | 80 | 81 | } 82 | 83 | findmx1(n,vec,r); 84 | 85 | 86 | 87 | return 0; 88 | } 89 | -------------------------------------------------------------------------------- /BINARY SEARCH/step3/B.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // sab moh maya hai... 6 | 7 | // give me some sunshine , give me some rain, give me another chance to grow up once again 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | bool sumseg(ll arr[],ll n,ll sum,ll k) 15 | { 16 | ll val=0; 17 | ll cnt=0; 18 | ll ans=0; 19 | for(ll i=0;isum) 23 | { 24 | val=arr[i]; 25 | cnt++; 26 | } 27 | ans=max(ans,val); 28 | } 29 | // cout<sum) 43 | { 44 | val=arr[i]; 45 | cnt++; 46 | } 47 | ans=max(ans,val); 48 | } 49 | cout<>n>>k; 60 | ll arr[n]; 61 | ll mn=INT_MIN; 62 | for(ll i=0;i>arr[i]; 65 | mn=max(arr[i],mn); 66 | } 67 | // cout<l+1) 77 | { 78 | ll mid=(l+r)/2; 79 | if(sumseg(arr,n,mid,k)) 80 | { 81 | r=mid; 82 | }else 83 | { 84 | l=mid; 85 | } 86 | } 87 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | bool good(ll arr[],ll n,ll val,ll k) 15 | { 16 | ll ch=arr[0]; 17 | ll cnt=1; 18 | for(ll i=1;i=val) 21 | { 22 | cnt++; 23 | ch=arr[i]; 24 | } 25 | } 26 | return (cnt>=k); 27 | } 28 | 29 | void ans(ll arr[],ll n,ll val) 30 | { 31 | ll ch=arr[0]; 32 | ll res=INT_MAX; 33 | for(ll i=1;i= val) 36 | { 37 | 38 | res=min(res,arr[i]-ch); 39 | ch=arr[i]; 40 | } 41 | } 42 | cout<>n>>k; 50 | 51 | ll arr[n]; 52 | for(ll i=0;i>arr[i]; 55 | } 56 | ll l=0,r=1e9; 57 | 58 | while(r>l+1) 59 | { 60 | ll mid=(l+r)/2; 61 | if(good(arr,n,mid,k)) 62 | { 63 | l=mid; 64 | }else 65 | { 66 | r=mid; 67 | 68 | } 69 | 70 | 71 | } 72 | ans(arr,n,l); 73 | return 0; 74 | 75 | } 76 | -------------------------------------------------------------------------------- /BINARY SEARCH/step4/A.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // sab moh maya hai.... 6 | 7 | // give me some sunshine, give me some rain, give me another chance to grow up once again 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | ll n,d; 15 | ll arr[100005]; 16 | 17 | 18 | bool ischeck(double x){ 19 | double brr[n]; 20 | for(ll i=0;i=1){ 23 | brr[i]+=brr[i-1]; 24 | } 25 | } 26 | double mn=0.0; 27 | for(ll i=d-1;i=mn){ 29 | return true; 30 | } 31 | mn=min(mn,brr[i-d+1]); 32 | } 33 | return false; 34 | 35 | 36 | } 37 | 38 | pair find(double x){ 39 | double brr[n]; 40 | for(ll i=0;i=1){ 43 | brr[i]+=brr[i-1]; 44 | } 45 | } 46 | double mn=0.0; 47 | ll in=-1; 48 | for(ll i=d-1;i=mn){ 50 | // return true; 51 | return {in,i}; 52 | 53 | } 54 | if(brr[i-d+1]>n>>d; 68 | 69 | ll l1=101,r1=0; 70 | for(ll i=0;i>arr[i]; 72 | l1=min(l1,arr[i]); 73 | r1=max(r1,arr[i]); 74 | } 75 | double l=(double)l1; 76 | double r=(double)r1; 77 | 78 | while(r>l+0.00000001){ 79 | double mid=(l+r)/2.0; 80 | // cout< pr=find(l); 89 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define ull unsigned long long int 14 | #define mod 1000000007 15 | 16 | int main(){ 17 | ios_base::sync_with_stdio(false); 18 | cin.tie(NULL); 19 | 20 | string s; 21 | cin>>s; 22 | ll n=s.length(); 23 | 24 | string ans=""; 25 | 26 | map mp1; 27 | mp1['A']=1; 28 | mp1['C']=1; 29 | mp1['G']=1; 30 | mp1['T']=1; 31 | 32 | map mp2; 33 | mp2=mp1; 34 | ll cnt=0; 35 | for(ll i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define ull unsigned long long int 14 | 15 | int main(){ 16 | ios_base::sync_with_stdio(false); 17 | cin.tie(NULL); 18 | 19 | ll n; 20 | cin>>n; 21 | 22 | 23 | vector vec; 24 | 25 | ll temp=n; 26 | while(temp!=0){ 27 | vec.push_back(temp%2); 28 | temp/=2; 29 | } 30 | 31 | reverse(vec.begin(),vec.end()); 32 | ll cnt=vec.size() -1; 33 | 34 | ull ans=0; 35 | 36 | ll val=0; 37 | 38 | // ll ans1=0; 39 | // for(ll i=1;i<=n;i++){ 40 | // temp=i; 41 | // while(temp!=0){ 42 | // ans1+=temp%2; 43 | // temp/=2; 44 | // } 45 | // } 46 | 47 | // cout<=0){ 54 | ans+=(ull)((cnt)*(ull)(vl/2)); 55 | ans+=(ull)((ull)(vl)*(val)); 56 | } 57 | val++; 58 | } 59 | vl/=2; 60 | 61 | 62 | cnt--; 63 | } 64 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | 16 | int main() 17 | { 18 | ios_base::sync_with_stdio(false); 19 | cin.tie(NULL); 20 | ll n; 21 | cin>>n; 22 | while(n!=1){ 23 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | ios_base::sync_with_stdio(false); 17 | cin.tie(NULL); 18 | 19 | string s; 20 | cin>>s; 21 | s+='*'; 22 | ll c=1; 23 | ll mx=0; 24 | for(int i=1;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | ios_base::sync_with_stdio(false); 17 | cin.tie(NULL); 18 | 19 | 20 | ll n; 21 | cin >> n; 22 | ll val=0; 23 | for(ll i=0;i>x; 26 | val=val^x; 27 | val=val^(i+1); 28 | } 29 | val^=n; 30 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | ios_base::sync_with_stdio(false); 17 | cin.tie(NULL); 18 | ll n; 19 | cin>>n; 20 | ll arr[n]; 21 | ll ans=0; 22 | for(ll i=0;i>arr[i]; 24 | if(i>0){ 25 | if(arr[i] 3 | using namespace std; 4 | 5 | #define ll unsigned long long 6 | #define mod 1000000007 7 | 8 | vector graph[200005]; 9 | vector visited(200005, false); 10 | ll dp[200005][2]; 11 | vector vec; 12 | ll ans=0; 13 | 14 | void dfs(ll v,ll par) 15 | { 16 | visited[v] = true; 17 | ll x=0; 18 | 19 | bool flag=false; 20 | for (auto u : graph[v]) 21 | { 22 | if (!visited[u]) 23 | { 24 | dfs(u,v); 25 | // dp[v]=dp[u]; 26 | x+=max(dp[u][0],dp[u][1]); 27 | if(dp[u][0]+1>dp[u][1] && !flag){ 28 | flag=true; 29 | x++; 30 | } 31 | } 32 | } 33 | if(flag){ 34 | dp[v][1]=x; 35 | dp[v][0]=x-1; 36 | }else{ 37 | dp[v][0]=x; 38 | } 39 | ans=max(ans,dp[v][0]); 40 | ans=max(ans,dp[v][1]); 41 | 42 | } 43 | 44 | int main() 45 | { 46 | ios_base::sync_with_stdio(false); 47 | cin.tie(NULL); 48 | 49 | ll n; 50 | cin >> n; 51 | for (ll i = 0; i < n - 1; i++) 52 | { 53 | ll u, v; 54 | cin >> u >> v; 55 | graph[u].push_back(v); 56 | // graph[u].push_back(v); 57 | graph[v].push_back(u); 58 | 59 | } 60 | 61 | dfs(1,0); 62 | 63 | 64 | cout << ans << endl; 65 | 66 | return 0; 67 | } 68 | -------------------------------------------------------------------------------- /CSES TREES/1131-TreeDiameter.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | using namespace std; 4 | 5 | #define ll unsigned long long 6 | #define mod 1000000007 7 | 8 | vector graph[200005]; 9 | vector visited(200005, false); 10 | ll ans=0; 11 | ll mxx=0; 12 | ll prv=0; 13 | ll v1,v2; 14 | 15 | vector> vec; 16 | void dfs(ll v) 17 | { 18 | visited[v] = true; 19 | ll x=0; 20 | 21 | bool flag=false; 22 | for (auto u : graph[v]) 23 | { 24 | if (!visited[u]) 25 | { 26 | mxx++; 27 | 28 | vec.push_back({mxx,u}); 29 | 30 | dfs(u); 31 | mxx--; 32 | } 33 | } 34 | } 35 | 36 | bool flag=false; 37 | 38 | void dfss(ll v){ 39 | if(flag){ 40 | return ; 41 | } 42 | visited[v]=true; 43 | for(auto u:graph[v]){ 44 | if(!visited[u]){ 45 | mxx++; 46 | ans=max(ans,mxx); 47 | dfss(u); 48 | mxx--; 49 | } 50 | } 51 | } 52 | 53 | 54 | 55 | int main() 56 | { 57 | ios_base::sync_with_stdio(false); 58 | cin.tie(NULL); 59 | 60 | ll n; 61 | cin >> n; 62 | for (ll i = 0; i < n - 1; i++) 63 | { 64 | ll u, v; 65 | cin >> u >> v; 66 | graph[u].push_back(v); 67 | graph[v].push_back(u); 68 | 69 | } 70 | 71 | dfs(1); 72 | vec.push_back({1,0}); 73 | sort(vec.begin(),vec.end()); 74 | auto it=vec.end(); 75 | it--; 76 | v1=it->second; 77 | 78 | mxx=0; 79 | visited.assign(n+1,false); 80 | // cout< 20 | using namespace std; 21 | 22 | #define ll unsigned long long 23 | #define mod 1000000007 24 | 25 | vector graph[200005]; 26 | vector visited(200005, false); 27 | ll mxx=0; 28 | 29 | ll prv=0; 30 | ll v1,v2; 31 | 32 | vector> vec; 33 | void dfs(ll v) 34 | { 35 | visited[v] = true; 36 | 37 | 38 | bool flag=false; 39 | for (auto u : graph[v]) 40 | { 41 | if (!visited[u]) 42 | { 43 | mxx++; 44 | if(mxx>prv){ 45 | prv=mxx; 46 | v1=u; 47 | } 48 | dfs(u); 49 | mxx--; 50 | } 51 | } 52 | } 53 | 54 | 55 | 56 | vector ans(200005,0); 57 | 58 | 59 | 60 | 61 | 62 | 63 | void dfss(ll v){ 64 | visited[v]=true; 65 | for(auto u:graph[v]){ 66 | if(!visited[u]){ 67 | mxx++; 68 | ans[u]=max(ans[u],mxx); 69 | dfss(u); 70 | mxx--; 71 | } 72 | } 73 | } 74 | 75 | 76 | 77 | int main() 78 | { 79 | ios_base::sync_with_stdio(false); 80 | cin.tie(NULL); 81 | 82 | ll n; 83 | cin >> n; 84 | for (ll i = 0; i < n - 1; i++) 85 | { 86 | ll u, v; 87 | cin >> u >> v; 88 | graph[u].push_back(v); 89 | graph[v].push_back(u); 90 | 91 | } 92 | 93 | dfs(1); 94 | ll stp=v1; 95 | mxx=0; 96 | prv=0; 97 | visited.assign(n+1,false); 98 | dfs(stp); 99 | ll endp=v1; 100 | visited.assign(n+1,false); 101 | dfss(stp); 102 | visited.assign(n+1,false); 103 | // cout< 22 | using namespace std; 23 | 24 | #define ll unsigned long long 25 | #define mod 1000000007 26 | 27 | vector graph[200005]; 28 | vector visited(200005, false); 29 | vector ans(200005,0); 30 | ll n; 31 | ll sm=0; 32 | ll mxx=0; 33 | void dfs(ll v) 34 | { 35 | visited[v] = true; 36 | 37 | for (auto u : graph[v]) 38 | { 39 | if (!visited[u]) 40 | { 41 | mxx++; 42 | sm+=mxx; 43 | dfs(u); 44 | mxx--; 45 | } 46 | } 47 | } 48 | 49 | 50 | 51 | vector child(200005,1); 52 | 53 | 54 | void dfs1(ll v){ 55 | visited[v]=true; 56 | for(auto u:graph[v]){ 57 | if(!visited[u]){ 58 | dfs1(u); 59 | child[v]+=child[u]; 60 | } 61 | } 62 | } 63 | 64 | 65 | void ansdfs(ll v){ 66 | visited[v]=true; 67 | for(auto u:graph[v]){ 68 | if(!visited[u]){ 69 | 70 | ans[u]=(ans[v]-2*child[u]+n); 71 | ansdfs(u); 72 | } 73 | } 74 | 75 | } 76 | 77 | 78 | 79 | int main() 80 | { 81 | ios_base::sync_with_stdio(false); 82 | cin.tie(NULL); 83 | 84 | // ll n; 85 | cin >> n; 86 | for (ll i = 0; i < n - 1; i++) 87 | { 88 | ll u, v; 89 | cin >> u >> v; 90 | graph[u].push_back(v); 91 | graph[v].push_back(u); 92 | 93 | } 94 | dfs(1); 95 | ans[1]=sm; 96 | visited.assign(n+1,false); 97 | dfs1(1); 98 | visited.assign(n+1,false); 99 | ansdfs(1); 100 | for(ll i=1;i<=n;i++){ 101 | cout< 18 | using namespace std; 19 | 20 | #define ll long long 21 | #define mod 1000000007 22 | ll n,q; 23 | 24 | 25 | vector graph[200005]; 26 | vector par(200005,-1); 27 | 28 | ll lvl=1; 29 | vector level(200005,0); 30 | 31 | ll dp[200005][21]; 32 | 33 | void dfs(ll v){ 34 | level[v]=lvl; 35 | // cout<=0;i--){ 58 | if(((k>>i)&1)){ 59 | // cout<level[v]){ 66 | ll k=level[u]-level[v]; 67 | for(ll i=20;i>=0;i--){ 68 | if(((k>>i)&1)){ 69 | u=dp[u][i]; 70 | } 71 | 72 | } 73 | } 74 | // cout<=0;i--){ 84 | if(dp[u][i]==dp[v][i]){ 85 | // ans=dp[u][i]; 86 | ans+=(1<>n>>q; 124 | // dp[1][0]=-1; 125 | memset(dp,0,sizeof(dp)); 126 | for(ll i=0;i>u>>v; 129 | // dp[v][0]=u; 130 | // dp[u][0]=v; 131 | graph[u].push_back(v); 132 | graph[v].push_back(u); 133 | } 134 | 135 | 136 | dfs(1); 137 | binlift(); 138 | 139 | 140 | // for(ll i=1;i<=n;i++){ 141 | // cout<>u>>v; 153 | cout< 31 | using namespace std; 32 | 33 | #define ll long long 34 | #define mod 1000000007 35 | ll n,q; 36 | 37 | 38 | vector graph[200005]; 39 | vector par(200005,-1); 40 | vector ans(200005,0); 41 | vector visited(200005,false); 42 | 43 | ll lvl=1; 44 | vector level(200005,0); 45 | 46 | ll dp[200005][21]; 47 | 48 | vector check(200005,0); 49 | 50 | void dfs(ll v){ 51 | level[v]=lvl; 52 | // cout<=0;i--){ 87 | if(((k>>i)&1)){ 88 | v=dp[v][i]; 89 | } 90 | 91 | } 92 | 93 | }else if(level[u]>level[v]){ 94 | ll k=level[u]-level[v]; 95 | for(ll i=20;i>=0;i--){ 96 | if(((k>>i)&1)){ 97 | u=dp[u][i]; 98 | } 99 | 100 | } 101 | } 102 | 103 | if(u==v){ 104 | return u; 105 | } 106 | ll ans=0; 107 | ll pre=0; 108 | ll anss=INT_MAX; 109 | for(ll i=20;i>=0;i--){ 110 | if(dp[u][i]==dp[v][i]){ 111 | // ans=dp[u][i]; 112 | ans=dp[u][i]; 113 | }else{ 114 | u=dp[u][i]; 115 | v=dp[v][i]; 116 | } 117 | } 118 | return ans; 119 | } 120 | 121 | 122 | void binlift(){ 123 | for(ll i=1;i<=20;i++){ 124 | for(ll j=1;j<=n;j++){ 125 | dp[j][i]=dp[dp[j][i-1]][i-1]; 126 | } 127 | } 128 | 129 | } 130 | 131 | 132 | 133 | 134 | 135 | int main() 136 | { 137 | ios_base::sync_with_stdio(false); 138 | cin.tie(NULL); 139 | cin>>n>>q; 140 | // dp[1][0]=-1; 141 | memset(dp,0,sizeof(dp)); 142 | for(ll i=0;i>u>>v; 145 | // dp[v][0]=u; 146 | // dp[u][0]=v; 147 | graph[u].push_back(v); 148 | graph[v].push_back(u); 149 | } 150 | 151 | 152 | dfs(1); 153 | binlift(); 154 | 155 | while(q--){ 156 | ll u,v; 157 | cin>>u>>v; 158 | ll val=lca(u,v); 159 | // cout< sum of all the node in subtree; which will be equal to :- sum(vec[stnode],vec[stnode+child[stnode]); 15 | where child[i] denotes the element in a subtree of ith node; 16 | 17 | now we can constuct a segment tree to answer the queries; 18 | 19 | */ 20 | 21 | #include 22 | using namespace std; 23 | 24 | #define ll long long 25 | #define mod 1000000007 26 | ll n,q; 27 | 28 | vector arr(200005,0); 29 | 30 | vector graph[200005]; 31 | 32 | vector child(200005,1); 33 | vector visited(200005,false); 34 | 35 | vector vec; 36 | vector pos(200005,0); 37 | 38 | 39 | void dfs(ll v){ 40 | visited[v]=true; 41 | vec.push_back(v); 42 | for(auto u:graph[v]){ 43 | if(!visited[u]){ 44 | dfs(u); 45 | child[v]+=child[u]; 46 | } 47 | } 48 | } 49 | 50 | 51 | 52 | 53 | vector seg(800005,0); 54 | 55 | 56 | void st(ll i,ll val,ll x,ll l,ll r){ 57 | if(r-l==1){ 58 | seg[x]=val; 59 | return ; 60 | } 61 | 62 | ll mid=(l+r)/2; 63 | if(i=l && rf<=r){ 74 | return seg[x]; 75 | }else if(lf>=r || rf<=l){ 76 | return 0; 77 | } 78 | ll mid=(lf+rf)/2; 79 | return sum(l,r,2*x+1,lf,mid)+sum(l,r,2*x+2,mid,rf); 80 | } 81 | 82 | 83 | 84 | int main() 85 | { 86 | ios_base::sync_with_stdio(false); 87 | cin.tie(NULL); 88 | cin>>n>>q; 89 | 90 | for(ll i=0;i>arr[i]; 92 | 93 | } 94 | 95 | 96 | for(ll i=0;i>u>>v; 99 | u--; 100 | v--; 101 | graph[u].push_back(v); 102 | graph[v].push_back(u); 103 | } 104 | dfs(0); 105 | 106 | for(ll i=0;i>tp; 119 | if(tp==1){ 120 | ll s,x; 121 | cin>>s>>x; 122 | s--; 123 | s=pos[s]; 124 | st(s,x,0,0,n); 125 | }else{ 126 | ll s; 127 | cin>>s; 128 | s--; 129 | 130 | ll l=pos[s]; 131 | ll r=l+child[s]; 132 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | vector graph[200005]; 16 | 17 | vector ans(200005,0); 18 | 19 | vector visited(200005,false); 20 | 21 | 22 | void dfs(ll v){ 23 | visited[v]=true; 24 | ll an=0; 25 | for(auto u:graph[v]){ 26 | if(!visited[u]){ 27 | dfs(u); 28 | } 29 | an+=(ans[u]+1); 30 | } 31 | ans[v]=an; 32 | } 33 | 34 | 35 | 36 | int main() 37 | { 38 | ios_base::sync_with_stdio(false); 39 | cin.tie(NULL); 40 | ll n; 41 | cin>>n; 42 | ll arr[n+1]; 43 | arr[1]=-1; 44 | for(ll i=2;i<=n;i++){ 45 | cin>>arr[i]; 46 | } 47 | // cout<<"YES"< 19 | using namespace std; 20 | 21 | #define ll long long 22 | #define mod 1000000007 23 | 24 | vector graph[200005]; 25 | 26 | vector ans(200005,0); 27 | 28 | vector visited(200005,false); 29 | 30 | ll dp[200005][20]; 31 | 32 | ll n,q; 33 | 34 | 35 | 36 | void binlift(){ 37 | for(ll i=1;i<20;i++){ 38 | for(ll j=1;j<=n;j++){ 39 | if(dp[j][i-1]==-1){ 40 | dp[j][i]=-1; 41 | continue; 42 | } 43 | dp[j][i]=dp[dp[j][i-1]][i-1]; 44 | } 45 | } 46 | 47 | 48 | } 49 | 50 | 51 | ll query(ll x,ll k){ 52 | ll prev=x; 53 | for(ll i=20;i>=0;i--){ 54 | if((k>>i)&1){ 55 | // cout<>n>>q; 73 | ll arr[n+1]; 74 | arr[1]=-1; 75 | memset(dp,-1,sizeof(dp)); 76 | dp[1][0]=-1; 77 | for(ll i=2;i<=n;i++){ 78 | cin>>arr[i]; 79 | dp[i][0]=arr[i]; 80 | 81 | } 82 | 83 | // for(ll i=1;i<=n;i++) 84 | // { 85 | // for(ll j=0;j<=3;j++){ 86 | // cout<>x>>k; 96 | 97 | ll ans=query(x,k); 98 | cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | #define mod 1000000007 16 | ll n,q; 17 | 18 | 19 | vector graph[200005]; 20 | 21 | ll lvl=1; 22 | vector level(200005,0); 23 | 24 | ll dp[200005][21]; 25 | 26 | void dfs(ll v){ 27 | level[v]=lvl; 28 | // cout<=0;i--){ 49 | if(((k>>i)&1)){ 50 | // cout<level[v]){ 57 | ll k=level[u]-level[v]; 58 | for(ll i=20;i>=0;i--){ 59 | if(((k>>i)&1)){ 60 | u=dp[u][i]; 61 | } 62 | 63 | } 64 | } 65 | if(u==v){ 66 | return u; 67 | } 68 | ll ans=0; 69 | 70 | for(ll i=20;i>=0;i--){ 71 | if(dp[u][i]==dp[v][i]){ 72 | ans=dp[u][i]; 73 | }else{ 74 | u=dp[u][i]; 75 | v=dp[v][i]; 76 | } 77 | } 78 | return ans; 79 | } 80 | 81 | 82 | void binlift(){ 83 | for(ll i=1;i<=20;i++){ 84 | for(ll j=1;j<=n;j++){ 85 | dp[j][i]=dp[dp[j][i-1]][i-1]; 86 | 87 | } 88 | } 89 | 90 | } 91 | 92 | 93 | 94 | 95 | 96 | int main() 97 | { 98 | ios_base::sync_with_stdio(false); 99 | cin.tie(NULL); 100 | cin>>n>>q; 101 | // dp[1][0]=-1; 102 | memset(dp,0,sizeof(dp)); 103 | for(ll i=2;i<=n;i++){ 104 | ll x; 105 | cin>>x; 106 | dp[i][0]=x; 107 | graph[x].push_back(i); 108 | // graph[x].push_back(i); 109 | } 110 | 111 | binlift(); 112 | 113 | 114 | // cout<<"U"; 115 | dfs(1); 116 | // cout<<"U"; 117 | 118 | // for(ll i=1;i<=n;i++){ 119 | // cout<>u>>v; 125 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll dp[40005][500]; 16 | 17 | int main() 18 | { 19 | ll t; 20 | cin >> t; 21 | ll N = 40005; 22 | vector vec; 23 | vector ans(N, 0); 24 | vector pali(N, false); 25 | vec.push_back(0); 26 | for (ll i = 1; i < N; i++) 27 | { 28 | ll temp = i; 29 | bool flag = false; 30 | vector bits; 31 | while (temp != 0) 32 | { 33 | ll val = temp % 10; 34 | bits.push_back(val); 35 | temp /= 10; 36 | } 37 | 38 | bool check = true; 39 | ll sz = bits.size(); 40 | for (ll i = 0; i < (sz / 2); i++) 41 | { 42 | if (bits[i] != bits[sz - i - 1]) 43 | { 44 | check = false; 45 | break; 46 | } 47 | } 48 | pali[i] = check; 49 | if (check) 50 | { 51 | vec.push_back(i); 52 | } 53 | } 54 | ll siz = vec.size(); 55 | // dp[0][0] = 1; 56 | // cout << "YES" << endl; 57 | // dp[1][1] = 1; 58 | // siz=400; 59 | // cout << siz << endl; 60 | 61 | for (int j = 1; j <= siz; j++) 62 | dp[0][j] = 1; 63 | for (int i = 1; i < N; i++) 64 | { 65 | dp[i][0] = 0; 66 | for (int j = 1; j <= siz; j++) 67 | { 68 | if (vec[j] <= i) 69 | dp[i][j] = (dp[i][j - 1] + dp[i - vec[j]][j]) % mod; 70 | else 71 | dp[i][j] = dp[i][j - 1]; 72 | } 73 | } 74 | // cout << "YES" << endl; 75 | 76 | while (t--) 77 | { 78 | ll n; 79 | cin >> n; 80 | cout << dp[n][siz-1] << endl; 81 | } 82 | return 0; 83 | } 84 | -------------------------------------------------------------------------------- /DP/2.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // give me some sunshine, give me some rain give me another chance to grow up once again.... 6 | 7 | // sab moh maya hai.... 8 | 9 | // waiting.... 10 | 11 | #include 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | int main(){ 17 | ll t; 18 | cin>>t; 19 | while(t--){ 20 | string s; 21 | cin>>s; 22 | ll n=s.length(); 23 | vector dp(n+1,0); 24 | vector vec(26,-1); 25 | for(ll i=n-1;i>=0;i--){ 26 | ll val=(ll)(s[i])-(ll)('a'); 27 | ll in=vec[val]; 28 | ll an=0; 29 | if(in!=-1) 30 | { 31 | an=dp[in+1]; 32 | }else{ 33 | an=-2; 34 | } 35 | 36 | dp[i]=max(dp[i+1],an+2); 37 | vec[val]=i; 38 | 39 | } 40 | 41 | 42 | cout<<(n-dp[0])< 12 | using namespace std; 13 | 14 | #define ll long long 15 | #define mod 998244353 16 | 17 | 18 | ll add(ll x,ll y){ 19 | return (x%mod + y%mod)%mod; 20 | } 21 | 22 | ll mul(ll x,ll y){ 23 | return ((x%mod)*(y%mod))%mod; 24 | } 25 | 26 | 27 | ll c[1001][1001]; 28 | 29 | void cr(){ 30 | for(ll i=0;i<=1000;i++){ 31 | c[i][0]=1; 32 | } 33 | 34 | for(ll i=1;i<=1000;i++){ 35 | for(ll j=1;j<=i;j++){ 36 | c[i][j]=add(c[i-1][j],c[i-1][j-1]); 37 | } 38 | } 39 | } 40 | 41 | 42 | 43 | int main(){ 44 | cr(); 45 | ll n; 46 | cin>>n; 47 | ll arr[n]; 48 | for(ll i=0;i>arr[i]; 50 | } 51 | // cout< dp(n+1,0); 53 | 54 | ll mx=0; 55 | 56 | dp[n]=1; 57 | for(ll i=n-1;i>=0;i--){ 58 | ll k=arr[i]; 59 | 60 | 61 | if(k<=0){ 62 | continue; 63 | } 64 | 65 | 66 | 67 | // ll an=1; 68 | 69 | // dp[i]=add(dp[i],(c[n-i-1][k])); 70 | for(ll j=i+k+1;j<=n;j++){ 71 | dp[i]=add(dp[i],mul(c[j-i-1][k],(dp[j]))); 72 | } 73 | } 74 | 75 | 76 | ll ans=0; 77 | for(ll i=0;i<=n-1;i++){ 78 | ans=add(ans,dp[i]); 79 | // cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll DP[105][10005]={INT_MAX}; 17 | 18 | ll dp(ll n,ll arr[],ll brr[],ll i,ll s,ll sum){ 19 | if(i>=n){ 20 | return s*s +(sum-s)*(sum-s); 21 | } 22 | if(DP[i][s]!=INT_MAX){ 23 | // cout<>t; 38 | while(t--){ 39 | ll n; 40 | cin>>n; 41 | ll arr[n],brr[n]; 42 | ll ans=0; 43 | ll mx=-1; 44 | ll ina=-1; 45 | ll inb=-1; 46 | ll sum=0; 47 | 48 | for(ll i=0;i>arr[i]; 50 | sum+=arr[i]; 51 | ans+=(arr[i]*arr[i])*(n-2); 52 | } 53 | for(ll i=0;i>brr[i]; 55 | sum+=brr[i]; 56 | ans+=(brr[i]*brr[i])*(n-2); 57 | 58 | } 59 | for(ll i=0;i<=n;i++){ 60 | for(ll j=0;j<=sum+2;j++){ 61 | DP[i][j]=INT_MAX; 62 | } 63 | } 64 | 65 | if(n==1){ 66 | cout<<"0"< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll solve(ll k, ll coins[], ll crr[], ll n) 17 | { 18 | 19 | ll dp[k + 1]; 20 | memset(dp, 0, sizeof(dp)); 21 | 22 | for (ll i = 1; i <= n; i++) 23 | { 24 | for (ll w = k; w >= 0; w--) 25 | { 26 | 27 | if (coins[i - 1] <= w) 28 | 29 | dp[w] = max(dp[w], dp[w - coins[i - 1]] + crr[i - 1]); 30 | } 31 | } 32 | return dp[k]; 33 | } 34 | 35 | 36 | int main() 37 | { 38 | ll t; 39 | cin >> t; 40 | ll cost[1025]; 41 | memset(cost,1000000,sizeof(cost)); 42 | cost[1] = 0, cost[2] = 1; 43 | for (int i = 3; i < 1024; i++) { 44 | for (int j = i - 1; j >= 1; j--) { 45 | int z = i - j; 46 | int x = j / z; 47 | if (x > 0 && (j + (j / x)) == i) { 48 | cost[i] = min(cost[i], 1 + cost[j]); 49 | } 50 | } 51 | } 52 | // for(ll i=1;i<=10;i++) 53 | // { 54 | // cout<> n >> k; 61 | // ll arr[n]; 62 | ll brr[n]; 63 | ll crr[n]; 64 | 65 | for (ll i = 0; i < n; i++) 66 | { 67 | cin >> brr[i]; 68 | } 69 | for (ll i = 0; i < n; i++) 70 | { 71 | cin >> crr[i]; 72 | } 73 | 74 | ll coins[n]; 75 | // memset(coins, 0, sizeof(coins)); 76 | ll vlll = 0; 77 | for (ll i = 0; i < n; i++) 78 | { 79 | coins[i]=cost[brr[i]]; 80 | vlll+=(cost[brr[i]]); 81 | } 82 | k = min(k, vlll); 83 | 84 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll mulm(ll a,ll b){ 16 | return ((a%mod)*(b%mod))%mod; 17 | } 18 | 19 | ll summ(ll a,ll b){ 20 | return (a%mod + b%mod)%mod; 21 | } 22 | 23 | long long binpow(long long a, long long b) { 24 | long long res = 1; 25 | while (b > 0) { 26 | if (b & 1) 27 | res = mulm(res , a); 28 | a = mulm(a,a); 29 | b >>= 1; 30 | } 31 | return res; 32 | } 33 | 34 | 35 | int main(){ 36 | ll t; 37 | cin>>t; 38 | while(t--){ 39 | ll n,k; 40 | cin>>n>>k; 41 | if(k==0){ 42 | cout<<"1"<=2){ 74 | val1=mulm(val1,binpow(2,(n-1))-1); 75 | // cout<<"val1"<>& cost,int n,int m,int i,int mask){ 6 | if(dp[i][mask]!=-1){ 7 | return dp[i][mask]; 8 | } 9 | int an=INT_MAX; 10 | if(i==n){ 11 | an=0; 12 | // cout<>& cost) { 35 | memset(dp,-1,sizeof(dp)); 36 | memset(mn,101,sizeof(mn)); 37 | int mx=INT_MAX; 38 | int n=cost.size(); 39 | int m=cost[0].size(); 40 | for(int i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll n,m; 16 | 17 | ll dp[1005][(1<<11)]; 18 | // vector nm; 19 | 20 | void generate_next_mask(ll currentmask,ll i,ll next_mask,vector &nm){ 21 | if(i==n){ 22 | nm.push_back(next_mask); 23 | return ; 24 | } 25 | 26 | 27 | if(((currentmask>>i)&1)==1){ 28 | generate_next_mask(currentmask,i+1,next_mask,nm); 29 | }else{ 30 | generate_next_mask(currentmask,i+1,next_mask+(1<>(i+1))&1)==0){ 32 | generate_next_mask(currentmask,i+2,next_mask,nm); 33 | } 34 | } 35 | 36 | } 37 | 38 | 39 | ll ans(ll i,ll mask){ 40 | if(i==m){ 41 | if(mask==0){ 42 | return 1; 43 | } 44 | return 0; 45 | } 46 | 47 | if(dp[i][mask]!=-1){ 48 | return dp[i][mask]; 49 | } 50 | ll an=0; 51 | // nm.clear(); 52 | vector nm; 53 | generate_next_mask(mask,0,0,nm); 54 | // cout<>n>>m; 70 | memset(dp,-1,sizeof(dp)); 71 | cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll n; 17 | string s; 18 | bool dp[50005][(1<<6)+4]; 19 | 20 | vector checkpalli6(1<<6,false); 21 | vector checkpalli5(1<<5,false); 22 | 23 | 24 | bool ans(ll i,ll k5,ll k6){ 25 | if(i>=5 && checkpalli5[k5]){ 26 | return false; 27 | } 28 | if(i>=6 && checkpalli6[k6]){ 29 | return false; 30 | } 31 | 32 | if(i==n){ 33 | return true; 34 | 35 | } 36 | if(dp[i][k6]){ 37 | return false; 38 | } 39 | 40 | dp[i][k6]=true; 41 | 42 | 43 | if(s[i]=='0' || s[i]=='?'){ 44 | ll nk5=(k5<<1)&((1<<5) -1); 45 | 46 | ll nk6=(k6<<1)&((1<<6) -1); 47 | 48 | if(ans(i+1,nk5,nk6)){ 49 | return true; 50 | } 51 | 52 | } 53 | 54 | if(s[i]=='1' || s[i]=='?'){ 55 | ll nk5=((k5<<1) +1 )&((1<<5) -1); 56 | 57 | ll nk6=((k6<<1)+1)&((1<<6) -1); 58 | 59 | if(ans(i+1,nk5,nk6)){ 60 | return true; 61 | } 62 | 63 | } 64 | return false; 65 | } 66 | 67 | 68 | 69 | int main(){ 70 | 71 | for(ll i=0;i<(1<<5);i++){ 72 | ll c=5; 73 | ll temp=i; 74 | string s=""; 75 | while(c--){ 76 | s+=(temp%2)?"1":"0"; 77 | temp/=2; 78 | } 79 | string t=s; 80 | reverse(s.begin(),s.end()); 81 | if(t==s){ 82 | checkpalli5[i]=true; 83 | } 84 | } 85 | 86 | 87 | for(ll i=0;i<(1<<6);i++){ 88 | ll c=6; 89 | ll temp=i; 90 | string s=""; 91 | while(c--){ 92 | s+=(temp%2)?"1":"0"; 93 | temp/=2; 94 | } 95 | string t=s; 96 | reverse(s.begin(),s.end()); 97 | if(t==s){ 98 | checkpalli6[i]=true; 99 | } 100 | } 101 | 102 | ll t; 103 | cin>>t; 104 | for(ll tt=1;tt<=t;tt++){ 105 | memset(dp,0,sizeof(dp)); 106 | cin>>n; 107 | cin>>s; 108 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | // ll dp[5005][5005]; 15 | #define mod 1000000007 16 | 17 | ll dp[505][130000]; 18 | 19 | 20 | int main() 21 | { 22 | ios_base::sync_with_stdio(false); cin.tie(0); 23 | ll n; 24 | cin>>n; 25 | ll sm=((n)*(n+1))/2; 26 | 27 | if(sm%2!=0){ 28 | cout<<"0"<=0){ 42 | dp[i][j]=(dp[i-1][j]%mod+dp[i-1][j-i]%mod)%mod; 43 | }else{ 44 | dp[i][j]=dp[i-1][j]%mod; 45 | } 46 | } 47 | } 48 | 49 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | // ll dp[5005][5005]; 15 | 16 | 17 | 18 | int main() 19 | { 20 | ios_base::sync_with_stdio(false); cin.tie(0); 21 | ll n; 22 | 23 | cin>>n; 24 | ll xrr[n+1]; 25 | 26 | vector> dp(n+1,vector(n+1,0)); 27 | 28 | ll sm=0; 29 | for(ll i=1;i<=n;i++){ 30 | cin>>xrr[i]; 31 | sm+=xrr[i]; 32 | } 33 | // ll ans=-1e9; 34 | ll ans; 35 | for(ll i=n;i>=1;i--){ 36 | for(ll j=i;j<=n;j++){ 37 | 38 | if(i==j){ 39 | dp[i][j]=xrr[i]; 40 | continue; 41 | } 42 | dp[i][j]=max(xrr[i]-dp[i+1][j],xrr[j]-dp[i][j-1]); 43 | 44 | 45 | } 46 | } 47 | ans=dp[1][n]; 48 | sm+=ans; 49 | cout<<(sm/2)< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | // ll dp[5005][5005]; 15 | #define mod 1000000007 16 | 17 | ll dp[505][130000]; 18 | 19 | 20 | int main() 21 | { 22 | ios_base::sync_with_stdio(false); cin.tie(0); 23 | ll n; 24 | cin>>n; 25 | vector,ll>> vec; 26 | vector vec1; 27 | vec1.push_back(0); 28 | for(ll i=0;i>a>>b>>x; 32 | vec1.push_back(a); 33 | vec1.push_back(b); 34 | vec.push_back({{a,b},x}); 35 | } 36 | 37 | sort(vec1.begin(),vec1.end()); 38 | vec1.push_back(0); 39 | vector v; 40 | for(ll i=1;i<=(ll)(vec1.size());i++){ 41 | if(vec1[i]!=vec1[i-1]){ 42 | v.push_back(vec1[i-1]); 43 | } 44 | } 45 | ll sz=v.size(); 46 | 47 | for(ll i=0;i vc; 62 | for(ll i=0;i dp(sz+1,0); 68 | for(ll i=1;i<=sz;i++){ 69 | ll l=lower_bound(vc.begin(),vc.end(),i)-vc.begin(); 70 | ll r=upper_bound(vc.begin(),vc.end(),i)-vc.begin(); 71 | dp[i]=dp[i-1]; 72 | 73 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | int main() 26 | { 27 | ll n; 28 | cin>>n; 29 | ll arr[n]; 30 | // cin>>arr[i]; 31 | for(ll i=0;i>arr[i]; 33 | } 34 | vector dp(n+1,INT_MAX); 35 | dp[0]=INT_MIN; 36 | for(ll i=0;iarr[i] && dp[j-1] 10 | using namespace std; 11 | 12 | #define ll int 13 | #define mod 1000000007 14 | 15 | ll dp[1005][100005]; 16 | 17 | int main(){ 18 | ios_base::sync_with_stdio(false); cin.tie(0); 19 | ll n,x; 20 | cin>>n>>x; 21 | 22 | ll hrr[n+1],srr[n+1]; 23 | for(ll i=1;i<=n;i++){ 24 | cin>>hrr[i]; 25 | } 26 | 27 | for(ll i=1;i<=n;i++){ 28 | cin>>srr[i]; 29 | } 30 | 31 | for(ll i=1;i<=n;i++){ 32 | for(ll j=1;j<=x;j++){ 33 | if(hrr[i]<=j){ 34 | dp[i][j]=max(dp[i-1][j-hrr[i]]+srr[i],dp[i-1][j]); 35 | }else{ 36 | dp[i][j]=dp[i-1][j]; 37 | } 38 | } 39 | } 40 | 41 | 42 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | vector dp(1000005,0); 26 | 27 | int main() 28 | { 29 | ll n; 30 | cin>>n; 31 | 32 | if(n==0){ 33 | cout<<"0"< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | vector dp(1000005,-1); 26 | 27 | int main() 28 | { 29 | ll n,x; 30 | cin>>n>>x; 31 | // cout<<"YES"< cn; 33 | // cout<<"YES"; 34 | 35 | for(ll i=0;i>val; 38 | cn.push_back(val); 39 | dp[val]=1; 40 | } 41 | // cout<<"YES"; 42 | sort(cn.begin(),cn.end()); 43 | for(ll i=1;i<=x;i++){ 44 | if(dp[i]!=-1){ 45 | continue; 46 | } 47 | for(ll j=0;j<(ll)cn.size();j++){ 48 | ll val=i-cn[j]; 49 | if(val<0){ 50 | break; 51 | }else if(dp[val]==-1){ 52 | continue; 53 | }else{ 54 | if(dp[i]==-1) 55 | { 56 | dp[i]=dp[val]+1; 57 | }else{ 58 | dp[i]=min(dp[i],dp[val]+1); 59 | } 60 | } 61 | 62 | 63 | } 64 | 65 | 66 | } 67 | 68 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | vector dp(1000005,0); 26 | 27 | int main() 28 | { 29 | ll n,x; 30 | cin>>n>>x; 31 | // cout<<"YES"< cn; 33 | // cout<<"YES"; 34 | 35 | for(ll i=0;i>val; 38 | cn.push_back(val); 39 | dp[val]=1; 40 | } 41 | // cout<<"YES"; 42 | sort(cn.begin(),cn.end()); 43 | for(ll i=1;i<=x;i++){ 44 | 45 | for(ll j=0;j<(ll)cn.size();j++){ 46 | ll val=i-cn[j]; 47 | if(val<0){ 48 | break; 49 | }else{ 50 | dp[i]=add(dp[i],dp[val]); 51 | 52 | } 53 | 54 | 55 | } 56 | 57 | 58 | } 59 | 60 | cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | ll n, x,i,j,val; 25 | ll dp[105][1000005]; 26 | vector cn(105,0); 27 | 28 | 29 | int main() 30 | { 31 | ios_base::sync_with_stdio(false); cin.tie(0); 32 | cin >> n >> x; 33 | // cout<<"YES"<> val; 40 | cn[i]=val; 41 | 42 | 43 | } 44 | dp[0][0]=1; 45 | 46 | for (i = 1; i <= n; i++) 47 | { 48 | 49 | for (j = 0; j<=x; j++) 50 | { 51 | 52 | dp[i][j] =dp[i-1][j]; 53 | 54 | val = j - cn[i]; 55 | if(val>=0) 56 | { 57 | dp[i][j] = add(dp[i][j], dp[i][val]); 58 | } 59 | } 60 | 61 | } 62 | 63 | cout < 10 | using namespace std; 11 | 12 | #define ll int 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | // vector> dp(1000005,vector(101,0)); 26 | // ll dp[1000005][101]; 27 | // ll dp[1000005]={-1}; 28 | int main() 29 | { 30 | ll n; 31 | cin>>n; 32 | vector dp(n+1,INT_MAX); 33 | // cout<=0;i--){ 37 | if(dp[i]!=INT_MAX){ 38 | ll temp=i; 39 | while(temp!=0){ 40 | ll rem=temp%10; 41 | // dp[i-rem]=min(dp[i-rem],) 42 | if(i-rem>=0){ 43 | dp[i-rem]=min(dp[i]+1,dp[i-rem]); 44 | } 45 | temp/=10; 46 | } 47 | } 48 | } 49 | cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | ll dp[1005][1005]; 26 | int main() 27 | { 28 | ll n; 29 | cin>>n; 30 | vector vec(n); 31 | for(ll i=0;i>vec[i]; 33 | } 34 | dp[1][1]=1; 35 | if(vec[0][0]=='*'){ 36 | cout<<"0"< 10 | using namespace std; 11 | 12 | #define ll int 13 | #define mod 1000000007 14 | ll n,m; 15 | string s1,s2; 16 | // ll dp[5005][5005]; 17 | vector> dp(5005,vector(5005,-1)); 18 | 19 | ll rec(ll i,ll j){ 20 | if(i==n || j==m){ 21 | return dp[i][j]=abs(n-i+m-j); 22 | } 23 | if(dp[i][j]!=-1){ 24 | return dp[i][j]; 25 | } 26 | 27 | 28 | if(s1[i]==s2[j]){ 29 | ll val4=rec(i+1,j+1); 30 | ll val1=1+rec(i,j+1); 31 | ll val2=1+rec(i+1,j+1); 32 | ll val3=1+rec(i+1,j); 33 | return dp[i][j]=min(min(val1,val2),min(val3,val4)); 34 | } 35 | 36 | ll val1=1+rec(i,j+1); 37 | ll val2=1+rec(i+1,j+1); 38 | ll val3=1+rec(i+1,j); 39 | return dp[i][j]=min(val1,min(val3,val2)); 40 | } 41 | 42 | 43 | int main() 44 | { 45 | ios_base::sync_with_stdio(false); cin.tie(0); 46 | 47 | cin>>s1>>s2; 48 | n=s1.length(),m=s2.length(); 49 | ll x=rec(0,0); 50 | 51 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | int main() 16 | { 17 | 18 | ios_base::sync_with_stdio(false); 19 | 20 | cin.tie(NULL); 21 | ll n,x; 22 | cin>>n>>x; 23 | ll arr[n]; 24 | for(ll i=0;i>arr[i]; 26 | } 27 | ll mx=(1<> dp(mx,{0,0}); 29 | dp[0]={1,0}; 30 | 31 | 32 | for(ll i=1;i res1={INT_MAX,INT_MAX}; 34 | // cout<<"YES"< res=dp[(i^(1< 10 | using namespace std; 11 | 12 | #define ll int 13 | ll mdl=1000000; 14 | #define mod 1000000007 15 | ll x,y; 16 | 17 | vector> dp(505,vector(505,-1)); 18 | 19 | ll rec(ll a,ll b){ 20 | if(a==b){ 21 | return dp[a][b]=0; 22 | } 23 | 24 | if(dp[a][b]!=-1){ 25 | return dp[a][b]; 26 | } 27 | 28 | 29 | 30 | 31 | ll mn=mdl; 32 | 33 | for(ll i=1;iyy1){ 40 | swap(xx1,yy1); 41 | } 42 | if(xx2>yy2){ 43 | swap(xx2,yy2); 44 | } 45 | mn=min(mn,1+rec(xx1,yy1)+rec(xx2,yy2)); 46 | 47 | } 48 | for(ll i=1;iyy1){ 55 | swap(xx1,yy1); 56 | } 57 | if(xx2>yy2){ 58 | swap(xx2,yy2); 59 | } 60 | mn=min(mn,1+rec(xx1,yy1)+rec(xx2,yy2)); 61 | } 62 | 63 | 64 | 65 | 66 | return dp[a][b]=mn; 67 | 68 | } 69 | 70 | 71 | int main() 72 | { 73 | ios_base::sync_with_stdio(false); cin.tie(0); 74 | 75 | cin>>x>>y; 76 | // n=s1.length(),m=s2.length(); 77 | if(x>y){ 78 | swap(x,y); 79 | } 80 | ll an=rec(x,y); 81 | 82 | cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | 14 | int main() 15 | { 16 | ios_base::sync_with_stdio(false); cin.tie(0); 17 | 18 | ll n; 19 | cin>>n; 20 | ll arr[n]; 21 | for(ll i=0;i>arr[i]; 23 | } 24 | sort(arr,arr+n); 25 | vector ch(200005,false); 26 | vector vec; 27 | 28 | vec.push_back(0); 29 | ll sz=0; 30 | 31 | for(ll i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll add(ll x, ll y) 16 | { 17 | return (x % mod + y % mod) % mod; 18 | } 19 | 20 | ll mul(ll x, ll y) 21 | { 22 | return ((x % mod) * (y % mod)) % mod; 23 | } 24 | 25 | int main() 26 | { 27 | ll n, m; 28 | cin >> n >> m; 29 | ll arr[n]; 30 | for (ll i = 0; i < n; i++) 31 | { 32 | cin >> arr[i]; 33 | } 34 | if (m == 1) 35 | { 36 | cout << "1" << endl; 37 | return 0; 38 | } 39 | vector> vec(n + 1, vector(m + 1, 0)); 40 | 41 | if (arr[0] == 0) 42 | { 43 | for (ll i = 1; i <= m; i++) 44 | { 45 | vec[0][i] = 1; 46 | } 47 | } 48 | else 49 | { 50 | ll x = arr[0]; 51 | vec[0][x] = 1; 52 | } 53 | 54 | for (ll i = 1; i < n; i++) 55 | { 56 | if (arr[i] == 0) 57 | { 58 | for (ll j = 1; j <= m; j++) 59 | { 60 | if (j == 1) 61 | { 62 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 63 | vec[i][j] = add(vec[i - 1][j + 1], vec[i][j]); 64 | } 65 | else if (j == m) 66 | { 67 | 68 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 69 | vec[i][j] = add(vec[i - 1][j - 1], vec[i][j]); 70 | } 71 | else 72 | { 73 | 74 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 75 | vec[i][j] = add(vec[i - 1][j + 1], vec[i][j]); 76 | vec[i][j] = add(vec[i - 1][j - 1], vec[i][j]); 77 | } 78 | } 79 | } 80 | else 81 | { 82 | ll j = arr[i]; 83 | if (j == 1) 84 | { 85 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 86 | vec[i][j] = add(vec[i - 1][j + 1], vec[i][j]); 87 | } 88 | else if (j == m) 89 | { 90 | 91 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 92 | vec[i][j] = add(vec[i - 1][j - 1], vec[i][j]); 93 | } 94 | else 95 | { 96 | 97 | vec[i][j] = add(vec[i - 1][j], vec[i][j]); 98 | vec[i][j] = add(vec[i - 1][j + 1], vec[i][j]); 99 | vec[i][j] = add(vec[i - 1][j - 1], vec[i][j]); 100 | } 101 | } 102 | } 103 | ll ans=0; 104 | 105 | for(ll i=1;i<=m;i++){ 106 | ans=add(ans,vec[n-1][i]); 107 | } 108 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll n,m; 16 | 17 | ll dp[1005][(1<<11)]; 18 | // vector nm; 19 | 20 | void generate_next_mask(ll currentmask,ll i,ll next_mask,vector &nm){ 21 | if(i==n){ 22 | nm.push_back(next_mask); 23 | return ; 24 | } 25 | 26 | 27 | if(((currentmask>>i)&1)==1){ 28 | generate_next_mask(currentmask,i+1,next_mask,nm); 29 | }else{ 30 | generate_next_mask(currentmask,i+1,next_mask+(1<>(i+1))&1)==0){ 32 | generate_next_mask(currentmask,i+2,next_mask,nm); 33 | } 34 | } 35 | 36 | } 37 | 38 | 39 | ll ans(ll i,ll mask){ 40 | if(i==m){ 41 | if(mask==0){ 42 | return 1; 43 | } 44 | return 0; 45 | } 46 | 47 | if(dp[i][mask]!=-1){ 48 | return dp[i][mask]; 49 | } 50 | ll an=0; 51 | // nm.clear(); 52 | vector nm; 53 | generate_next_mask(mask,0,0,nm); 54 | // cout<>n>>m; 70 | memset(dp,-1,sizeof(dp)); 71 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | 16 | ll dp[20][10][2][2]; 17 | 18 | 19 | ll rec(string a,ll i,ll prev,bool tight,bool check0){ 20 | if(i>=a.length()){ 21 | return 1; 22 | } 23 | 24 | if(prev!=-1 && dp[i][prev][tight][check0]!=-1){ 25 | return dp[i][prev][tight][check0]; 26 | } 27 | ll val=a[i]-'0'; 28 | ll ans=0; 29 | // cout<>a>>b; 52 | memset(dp,-1,sizeof(dp)); 53 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | // ll dp[1005][100005]; 16 | ll dp[5][1000005]; 17 | 18 | ll mul(ll x,ll y){ 19 | return ((x%mod)*(y%mod))%mod; 20 | } 21 | 22 | ll add(ll x,ll y){ 23 | return (x%mod + y%mod)%mod; 24 | } 25 | 26 | int main(){ 27 | ios_base::sync_with_stdio(false); cin.tie(0); 28 | dp[0][1]=1; 29 | dp[1][1]=1; 30 | dp[2][1]=1; 31 | dp[3][1]=1; 32 | dp[4][1]=2; 33 | for(ll i=2;i<=1000002;i++){ 34 | dp[4][i]=mul(2,dp[4][i-1]); 35 | ll val=mul(3,dp[0][i-1]); 36 | val=add(val,dp[1][i-1]); 37 | dp[4][i]=add(dp[4][i],val); 38 | 39 | dp[0][i]=add(dp[4][i-1],mul(3,dp[0][i-1])); 40 | dp[1][i]=add(dp[4][i-1] , dp[1][i-1]); 41 | dp[2][i]=add(dp[4][i-1] , dp[0][i-1]); 42 | dp[3][i]=add(dp[4][i-1] , dp[0][i-1]); 43 | 44 | } 45 | ll t; 46 | cin>>t; 47 | 48 | while(t--){ 49 | ll n; 50 | cin>>n; 51 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | string a,b; 14 | 15 | ll dp[110][110][13][2][2][2]; 16 | 17 | ll rec(string x,string y,ll sm1,ll mul,ll sum,ll i,ll tight,ll uptight,ll prevzeros){ 18 | if(sum>sm1 || (sm1-sum)>(y.length()-i)*9){ 19 | return 0; 20 | } 21 | if(i==x.length()){ 22 | 23 | if(mul==0 && sum==sm1){ 24 | // cout<>t; 61 | for(ll tt=1;tt<=t;tt++){ 62 | cin>>a>>b; 63 | 64 | string temp=""; 65 | ll val=b.length()-a.length(); 66 | while(val--){ 67 | temp+="0"; 68 | } 69 | temp+=a; 70 | // cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | 17 | 18 | ll fac[19]; 19 | 20 | ll val_bound(string s,ll i){ 21 | if(i==s.length()){ 22 | return 0; 23 | } 24 | ll val=s[i]-'0'; 25 | if(i==0){ 26 | return (((val-1)*fac[s.length()-i-1]) + val_bound(s,i+1)); 27 | } 28 | 29 | ll prev=s[i-1]-'0'; 30 | if(prev>a>>b; 52 | 53 | ll n=a.length(),m=b.length(); 54 | 55 | 56 | bool checkb=false; 57 | for(ll i=1;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | 16 | ll dp[20][10][2][2]; 17 | 18 | 19 | ll rec(string a,ll i,ll prev,bool tight,bool check0){ 20 | if(i>=a.length()){ 21 | return 1; 22 | } 23 | 24 | if(prev!=-1 && dp[i][prev][tight][check0]!=-1){ 25 | return dp[i][prev][tight][check0]; 26 | } 27 | ll val=a[i]-'0'; 28 | ll ans=0; 29 | // cout<>a>>b; 52 | memset(dp,-1,sizeof(dp)); 53 | // cout<= half of the lenght of that path. 4 | 5 | constraint: 6 | 1<=n<=10^5 7 | 1<=val<=10^5 8 | 9 | 10 | test case: 11 | 12 | 6 13 | 1 6 14 | 1 4 15 | 4 3 16 | 4 5 17 | 4 2 18 | 1 2 1 3 1 1 19 | 20 | 21 | now we know lest write all the paths 22 | path1 1-2--> 1-4-2 (value wise 1 3 2 ) we can see frequency of 1 which is 1 is equal to len/2(down) means 3/2=1; --> true 23 | path2 1-3--> 1-4-3 (value wise 1 3 1 ) we can see frequency of 1 which is 2 is greater then len/2(down) means 3/2=1; --> true 24 | path3 1-4--> 1-4 (value wise 1 1 ) we can see frequency of 1 which is 2 is greater then len/2(down) means 2/2=1; --> true 25 | path4 1-5--> 1-4-5 (value wise 1 3 1 ) we can see frequency of 1 which is 2 is greater then len/2(down) means 3/2=1; --> true 26 | path5 1-6--> 1-6 (value wise 1 1 ) we can see frequency of 1 which is 2 is greater then len/2(down) means 2/2=1; --> true 27 | 28 | now we can clearly see all the paths satisfy the condition so answer will be 5; 29 | 30 | 31 | approach:- 32 | brute force: 33 | we can write simple dfs and maintain a cnt array which will store freq of nodes val; 34 | and manullay by iterating from 1 to n we can find max value of frequency so time comp will be O(n^2); 35 | 36 | 37 | optimal approach: 38 | now focus on count array how can we compute max in less time? 39 | segment trees? 40 | if we maintain a segment tree and then seg[0] will be max of that freq array so this query time comp--> O(1) 41 | and remember we need to update value which will be in O(logn); 42 | so time comp--> O(nlogn); 43 | 44 | */ 45 | 46 | 47 | 48 | // JAI BAJARANG BALI 49 | 50 | // manitianajay45 51 | 52 | // give me some sunshine, give me some rain, give me another chance to grow up once again.... 53 | 54 | // sab moh maya hai.... 55 | 56 | #include 57 | using namespace std; 58 | 59 | #define ll long long 60 | #define mod 1000000007 61 | 62 | ll n; 63 | 64 | 65 | vector cnt(800005,0); 66 | vector visited(100005,false); 67 | vector crr(100005,0); 68 | vector graph[100005]; 69 | 70 | 71 | void update(ll i,ll val,ll x,ll l,ll r){ 72 | if(r-l==1){ 73 | cnt[x]=val; 74 | return ; 75 | } 76 | 77 | ll mid=(l+r)/2; 78 | if(i=(tl)/2){ 104 | ans++; 105 | } 106 | dfs(i); 107 | tl--; 108 | update(crr[i],cnt[crr[i]]-1,0,0,sz); 109 | 110 | } 111 | } 112 | 113 | 114 | } 115 | 116 | int main(){ 117 | cin>>n; 118 | 119 | 120 | for(ll i=0;i>u>>v; 123 | graph[u].push_back(v); 124 | graph[v].push_back(u); 125 | } 126 | 127 | for(ll i=1;i<=n;i++){ 128 | cin>>crr[i]; 129 | } 130 | 131 | while(sz 18 | using namespace std; 19 | 20 | #define ll long long 21 | 22 | 23 | 24 | ll ask(ll a,ll b){ 25 | cout<<"? "<>val; 28 | return val; 29 | } 30 | 31 | int main() 32 | { 33 | ll t; 34 | cin >> t; 35 | while (t--) 36 | { 37 | // ll val; 38 | // val=ask(1,3); 39 | vector bits; 40 | ll ans=0; 41 | ll cnt=0; 42 | 43 | 44 | 45 | for(ll i=0;i<30;i++){ 46 | ll a=(1< 7 | using namespace std; 8 | 9 | #define ll long long 10 | #define mod 1000000007 11 | 12 | 13 | ll ask(ll l, ll r) 14 | { 15 | if (l >= r) 16 | { 17 | return -1; 18 | } 19 | cout<<"? "<>val; 22 | return val-1; 23 | } 24 | 25 | int main() 26 | { 27 | ll n; 28 | cin>>n; 29 | ll smax; 30 | smax=ask(0,n-1); 31 | ll l,r; 32 | if(smax==0 || ask(0,smax)!=smax) 33 | { 34 | l=smax; 35 | r=n-1; 36 | ll m; 37 | 38 | while(r-l>1) 39 | { 40 | m=(l+r)/2; 41 | if(ask(smax,m)==smax) 42 | { 43 | r=m; 44 | }else 45 | { 46 | l=m; 47 | } 48 | } 49 | cout<<"! "<1) 57 | { 58 | m=(l+r)/2; 59 | if(ask(m,smax)==smax) 60 | { 61 | l=m; 62 | }else 63 | { 64 | r=m; 65 | } 66 | } 67 | cout<<"! "< 42 | using namespace std; 43 | 44 | #define ll long long 45 | 46 | ll ask(string s){ 47 | cout<<"? "<>val; 51 | return val; 52 | } 53 | 54 | int main() 55 | { 56 | ios_base::sync_with_stdio(false); 57 | cin.tie(NULL); 58 | ll n,m; 59 | cin>>n>>m; 60 | 61 | 62 | string s=""; 63 | for(ll i=0;i> edges; 70 | 71 | for(ll i=0;i which returns us the ith char of string, no of queries we can ask <=26; 16 | query2(l,r)--> which returns us no of distinct char between index [l,r], no of queries we can ask<=6000; 17 | 18 | 19 | case - I (char is occuring first time in string):- 20 | now by looking at maximum no of queries we can assure that query one will ask for finding distinct element which does not occurs in the string before that index, 21 | for ex- guess 22 | now let's consider we have find out "gu" now we are on index 3 now we know that particular char does not exist before so we can use (query1); 23 | but now que is how can we know that particular char exist or not before? 24 | it's simple we can run query2(1,i+1) and maintain a variable which cnt distinct char, now if previous index 25 | 26 | cnt +1 == query2(l,i+1) 27 | then we can say char is distinct and we can return; 28 | 29 | Case-II: (char is occured before in string); 30 | let's consider wrost case scenario, if all the 26 char exist before ith index in string then? 31 | brute force:- we can just store every char 's last pos in array and sort it pos wise; and can iterate over array from first index , and when it gives no of distinct 32 | char is equal to no of (sz-j)+1 means that element is distinct and we can break at that index now can simply write the ans char as (j-1)th char; 33 | but max no of queries will be more then 25000; 34 | how to optimise? 35 | just look at max no of queries constraint we can think about binary search? 36 | can we? yes. 37 | 38 | 39 | bcs pos array is sorted we can simply use binary search for finding first index on which that current char is distinct; 40 | 41 | for binary search implementation you can look at code; 42 | 43 | 44 | 45 | 46 | 47 | */ 48 | 49 | #include 50 | using namespace std; 51 | 52 | #define ll long long 53 | 54 | 55 | 56 | char query1(ll i){ 57 | cout<<"? 1 "<>ch; 60 | return ch; 61 | } 62 | 63 | 64 | 65 | ll query2(ll l,ll r){ 66 | cout<<"? 2 "<>ch; 69 | return ch; 70 | } 71 | 72 | int main(){ 73 | ios_base::sync_with_stdio(false); 74 | cin.tie(NULL); 75 | 76 | ll n; 77 | cin>>n; 78 | 79 | string s=""; 80 | vector pos(26,0); 81 | char ch=query1(1); 82 | s+=ch; 83 | 84 | ll val=(s[0]-'a'); 85 | pos[val]=1; 86 | vector> pr; 87 | 88 | for(ll i=1;i=l){ 113 | ll mid=(l+r)/2; 114 | ll vll=query2(pr[mid].first,i+1); 115 | 116 | if(vll==(sz-mid+1)){ 117 | r=mid-1; 118 | }else{ 119 | ans=mid; 120 | l=mid+1; 121 | } 122 | } 123 | s+=('a'+pr[ans].second); 124 | 125 | ll v=s[i]-'a'; 126 | pos[v]=i+1; 127 | 128 | 129 | 130 | } 131 | cout<<"! "< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | // 1 2 0 3 4 17 | 18 | ll ask(ll i, ll j, ll k) 19 | { 20 | cout << "? " << i << " " << j << " " << k << endl; 21 | ll val; 22 | cin >> val; 23 | 24 | return val; 25 | } 26 | 27 | int main() 28 | { 29 | ll t; 30 | cin >> t; 31 | while(t--){ 32 | ll n; 33 | cin >> n; 34 | ll j = 0; 35 | vector ss; 36 | 37 | for (ll i = 1; i <= n; i++) 38 | { 39 | ss.push_back(i); 40 | } 41 | 42 | while ((ll)ss.size() > 2) 43 | { 44 | vector s1; 45 | vector visited(n+1,false); 46 | for (ll i = 0; i+4 <= (ll)ss.size(); i+=4) 47 | { 48 | ll a = ss[i]; 49 | ll b = ss[i + 1]; 50 | ll c = ss[i + 2]; 51 | ll d = ss[i + 3]; 52 | 53 | ll val[4]; 54 | val[0] = ask(a, b, c); 55 | val[1] = ask(a, b, d); 56 | val[2] = ask(a, c, d); 57 | val[3] = ask(b, c, d); 58 | 59 | ll mn = 0; 60 | for (ll k = 0; k < 4; k++) 61 | { 62 | mn = max(mn, val[k]); 63 | } 64 | ll ans1, ans2; 65 | if(val[0]==mn && val[1]==mn){ 66 | ans1=a; 67 | ans2=b; 68 | }else if(val[0]==mn && val[2]==mn){ 69 | ans1=a; 70 | ans2=c; 71 | }else if(val[0]==mn && val[3]==mn){ 72 | ans1=b; 73 | ans2=c; 74 | }else if(val[1]==mn && val[2]==mn){ 75 | ans1=a; 76 | ans2=d; 77 | }else if(val[1]==mn && val[3]==mn){ 78 | ans1=b; 79 | ans2=d; 80 | }else if(val[2]==mn && val[3]==mn){ 81 | ans1=c; 82 | ans2=d; 83 | } 84 | if(!visited[ans1]){ 85 | visited[ans1]=true; 86 | s1.push_back(ans1); 87 | } 88 | 89 | if(!visited[ans2]){ 90 | visited[ans2]=true; 91 | s1.push_back(ans2); 92 | } 93 | 94 | } 95 | 96 | ll len=ss.size(); 97 | if(len%4!=0 && len>=4){ 98 | for(ll j=len-1;j>=len-len%4;j--){ 99 | s1.push_back(ss[j]); 100 | } 101 | } 102 | 103 | if(s1.size()==3){ 104 | for(ll k=1;k<=n;k++){ 105 | if(s1[0]!=k && s1[1]!=k && s1[2]!=k){ 106 | s1.push_back(k); 107 | break; 108 | } 109 | } 110 | }else if(s1.size()==1){ 111 | for(ll k=1;k<=n;k++){ 112 | if(s1[0]!=k){ 113 | s1.push_back(k); 114 | break; 115 | } 116 | } 117 | } 118 | ss=s1; 119 | 120 | 121 | 122 | 123 | } 124 | 125 | 126 | cout<<"! "; 127 | for(auto i:ss){ 128 | cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll ask(ll i) 17 | { 18 | 19 | cout << "? " << i << endl; 20 | ll val; 21 | cin >> val; 22 | return val; 23 | } 24 | 25 | int main() 26 | { 27 | ll t; 28 | cin >> t; 29 | while (t--) 30 | { 31 | ll n; 32 | cin >> n; 33 | ll prr[n + 1]; 34 | bool fl = false; 35 | vector flag(n + 1, false); 36 | ll cnt = 0; 37 | 38 | // ask(1); 39 | // ll i = 1; 40 | for (ll i = 1; i <= n; i++) 41 | { 42 | if (!flag[i]) 43 | { 44 | ll in=ask(i); 45 | ll val=ask(i); 46 | if(in==val){ 47 | prr[in]=val; 48 | continue; 49 | } 50 | while(!flag[val]){ 51 | prr[in]=val; 52 | flag[val]=true; 53 | in=val; 54 | val=ask(i); 55 | } 56 | } 57 | } 58 | cout << "! "; 59 | for (ll i = 1; i <= n; i++) 60 | { 61 | cout << prr[i] << " "; 62 | } 63 | cout << endl; 64 | } 65 | 66 | return 0; 67 | } 68 | -------------------------------------------------------------------------------- /Interactive problems/4.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // give me some sunshine, give me some rain, give me another chance to grow up once again 6 | 7 | // sab moh maya hai.... 8 | 9 | // waiting.... 10 | 11 | #include 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll ask(ll a, ll b, ll c) 17 | { 18 | 19 | cout << "? " << a << " " << b << " " << c << endl; 20 | ll val; 21 | cin >> val; 22 | return val; 23 | } 24 | 25 | int main() 26 | { 27 | ll t; 28 | cin >> t; 29 | while (t--) 30 | { 31 | ll N; 32 | cin >> N; 33 | ll val = ask(1, 2, 3); 34 | ll x, y; 35 | for (ll i = 2; i <= N-2; i++) 36 | { 37 | ll xh = ask(i, (i + 1), (i + 2)); 38 | if (xh != val) 39 | { 40 | x=i; 41 | y=i+1; 42 | break; 43 | } 44 | } 45 | 46 | 47 | ll n = x; 48 | ll m=y; 49 | ll imp[N+1]; 50 | ll fn1, fn2; 51 | for (ll i = 1; i <= N; i++) 52 | { 53 | if (n != i && m != i) 54 | { 55 | ll fn = ask(n, m, i); 56 | if (fn == 1) 57 | { 58 | fn1 = i; 59 | } 60 | else 61 | { 62 | fn2 = i; 63 | } 64 | imp[i] = fn; 65 | } 66 | } 67 | val = ask(n, fn1, fn2); 68 | imp[n] = val; 69 | val = ask(m, fn1, fn2); 70 | imp[m] = val; 71 | ll ans = 0; 72 | 73 | // cout< v; 75 | for (ll i = 1; i <= N; i++) 76 | { 77 | if (imp[i] == 0) 78 | { 79 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | ll askand(ll a, ll b){ 16 | cout<<"and "<>val; 19 | return val; 20 | } 21 | 22 | ll askor(ll a,ll b){ 23 | cout<<"or "<>val; 26 | return val; 27 | } 28 | 29 | 30 | int main(){ 31 | ll n,k; 32 | cin>>n>>k; 33 | vector v; 34 | ll a12,a23,a13; 35 | a12=askand(1,2) + askor(1,2); 36 | a23=askand(2,3) + askor(2,3); 37 | a13=askand(1,3) + askor(1,3); 38 | 39 | ll a1,a2,a3; 40 | a1=(a12-a23+a13)/2; 41 | a3=a13-a1; 42 | a2=a12-a1; 43 | v.push_back(a1); 44 | v.push_back(a2); 45 | v.push_back(a3); 46 | 47 | for(ll i=4;i<=n;i++){ 48 | ll vl=askand(1,i) + askor(1,i); 49 | v.push_back(vl-a1); 50 | } 51 | sort(v.begin(),v.end()); 52 | 53 | cout<<"finish "< 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll n; 14 | vector> ans; 15 | vector ask(ll r) 16 | { 17 | cout<<"? "< d(n); 21 | for(ll i=0;i>d[i]; 24 | 25 | } 26 | 27 | return d; 28 | 29 | } 30 | 31 | int main() 32 | { 33 | 34 | cin>>n; 35 | vector dl=ask(0); 36 | ll cnto=0,cnte=0; 37 | for(ll i=0;i=cnte) 49 | { 50 | 51 | for(ll i=0;i vs(n); 56 | if(i==0) 57 | { 58 | vs=dl; 59 | }else 60 | { 61 | vs=ask(i); 62 | } 63 | for(ll j=0;j vs(n); 80 | if(i==0) 81 | { 82 | vs=dl; 83 | }else 84 | { 85 | vs=ask(i); 86 | } 87 | for(ll j=0;j 7 | using namespace std; 8 | 9 | #define ll long long 10 | #define mod 1000000007 11 | 12 | 13 | ll ask(ll l, ll r) 14 | { 15 | if (l >= r) 16 | { 17 | return -1; 18 | } 19 | cout<<"? "<>val; 22 | return val-1; 23 | } 24 | 25 | int main() 26 | { 27 | ll n; 28 | cin>>n; 29 | ll smax; 30 | smax=ask(0,n-1); 31 | ll l,r; 32 | if(smax==0 || ask(0,smax)!=smax) 33 | { 34 | l=smax; 35 | r=n-1; 36 | ll m; 37 | 38 | while(r-l>1) 39 | { 40 | m=(l+r)/2; 41 | if(ask(smax,m)==smax) 42 | { 43 | r=m; 44 | }else 45 | { 46 | l=m; 47 | } 48 | } 49 | cout<<"! "<1) 57 | { 58 | m=(l+r)/2; 59 | if(ask(m,smax)==smax) 60 | { 61 | l=m; 62 | }else 63 | { 64 | r=m; 65 | } 66 | } 67 | cout<<"! "<>in; 27 | return in; 28 | } 29 | 30 | 31 | 32 | by using above function you can ask queries. 33 | 34 | Always look for maximum queries and constraint you may get a hint from there how to approach problem. 35 | In CF round interactive problems almost every time rated above 1800 and if you know about interactive problems and think a little bit and code it smoothly you will get AC. 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /RANGE Queries/README.MD: -------------------------------------------------------------------------------- 1 | source for segment trees: 2 | https://codeforces.com/edu/course/2 3 | https://cp-algorithms.com/data_structures/segment_tree.html 4 | 5 | 6 | other rangeQueries data structure(sparse table): 7 | https://cp-algorithms.com/data_structures/sparse-table.html 8 | -------------------------------------------------------------------------------- /RANGE Queries/cses/1143-HotelQueries.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // give me some sunshine, give me some rain ,give me another chance to grow up once again.... 6 | 7 | // sab moh maya hai.... 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | vector seg(800005,0); 15 | 16 | 17 | void set1(ll i,ll val,ll x,ll l,ll r){ 18 | if(r-l==1){ 19 | seg[x]=val; 20 | return ; 21 | } 22 | 23 | ll mid=(l+r)/2; 24 | 25 | if(i=val){ 42 | return in(val,2*x+1,l,mid); 43 | } 44 | return in(val,2*x+2,mid,r); 45 | } 46 | 47 | 48 | 49 | 50 | int main() 51 | { 52 | 53 | ios_base::sync_with_stdio(false); 54 | 55 | cin.tie(NULL); 56 | 57 | 58 | ll n,q; 59 | cin>>n>>q; 60 | ll arr[n]; 61 | for(ll i=0;i>arr[i]; 64 | set1(i,arr[i],0,0,n); 65 | 66 | } 67 | 68 | // for(ll i=0;i<2*n-1;i++){ 69 | // cout<>v; 78 | if(seg[0] 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | struct node{ 16 | ll prefix,suffix,mx,total; 17 | }; 18 | 19 | vector seg(800005, {0,0,0,0}); 20 | 21 | 22 | node merge(node a,node b){ 23 | node c; 24 | c.prefix=max(a.total+b.prefix,a.prefix); 25 | c.suffix=max(a.suffix+b.total,b.suffix); 26 | c.total=a.total+b.total; 27 | c.mx=max(a.mx,b.mx); 28 | c.mx=max(c.mx,c.suffix); 29 | c.mx=max(c.mx,c.prefix); 30 | c.mx=max(c.mx,a.suffix+b.prefix); 31 | return c; 32 | } 33 | 34 | 35 | 36 | void set1(ll i,ll val,ll x,ll l,ll r){ 37 | if(r-l==1){ 38 | seg[x].total=val; 39 | seg[x].mx=max(0ll,val); 40 | seg[x].prefix=max(0ll,val); 41 | seg[x].suffix=max(0ll,val); 42 | return ; 43 | } 44 | ll mid=(l+r)/2; 45 | 46 | if(i=l && rf<=r){ 57 | return seg[x]; 58 | }else if(lf>=r || rf<=l){ 59 | return {0,0,0,0}; 60 | } 61 | ll mid=(lf+rf)/2; 62 | return merge(ans(l,r,2*x+1,lf,mid),ans(l,r,2*x+2,mid,rf)); 63 | } 64 | 65 | 66 | 67 | 68 | 69 | int main() 70 | { 71 | 72 | ios_base::sync_with_stdio(false); 73 | 74 | cin.tie(NULL); 75 | 76 | ll n, q; 77 | cin >> n >> q; 78 | 79 | for (ll i = 0; i < n; i++) 80 | { 81 | ll x; 82 | cin>>x; 83 | 84 | set1(i,x,0,0,n); 85 | } 86 | 87 | while(q--){ 88 | ll i,u; 89 | cin>>i>>u; 90 | i--; 91 | set1(i,u,0,0,n); 92 | 93 | 94 | 95 | node an=ans(0,n,0,0,n); 96 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | int main() 15 | { 16 | 17 | ios_base::sync_with_stdio(false); 18 | cin.tie(NULL); 19 | ll n,q; 20 | cin>>n>>q; 21 | ll arr[n+1]; 22 | arr[0]=0; 23 | for(ll i=1;i<=n;i++) 24 | { 25 | cin>>arr[i]; 26 | arr[i]+=arr[i-1]; 27 | } 28 | while(q--){ 29 | ll l,r; 30 | cin>>l>>r; 31 | l--; 32 | ll ans=arr[r]-arr[l]; 33 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | // ll st[200005][25]; 16 | vector> st(200005,vector(25,INT_MAX)); 17 | 18 | int main() 19 | { 20 | 21 | ios_base::sync_with_stdio(false); 22 | 23 | cin.tie(NULL); 24 | 25 | 26 | ll n,q; 27 | cin>>n>>q; 28 | ll arr[n+1]; 29 | // cout<>arr[i]; 33 | st[i][0]=arr[i]; 34 | } 35 | 36 | 37 | for(ll i=1;i<25;i++){ 38 | for(ll j=1;(j+(1<>l>>r; 50 | ll ans=st[l][0]; 51 | for(ll i=24;i>=0;i--){ 52 | if(((l+(1< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | // ll st[200005][25]; 16 | vector seg(800005,0); 17 | 18 | void st(ll i,ll val,ll x,ll l,ll r){ 19 | if(r-l==1){ 20 | seg[x]=val; 21 | return ; 22 | } 23 | ll mid=(l+r)/2; 24 | if(i=l && r>=rf){ 35 | return seg[x]; 36 | }else if(lf>=r || rf<=l){ 37 | return 0; 38 | } 39 | ll mid=(lf+rf)/2; 40 | 41 | return sum(l,r,2*x+1,lf,mid)+sum(l,r,2*x+2,mid,rf); 42 | 43 | } 44 | 45 | int main() 46 | { 47 | 48 | ios_base::sync_with_stdio(false); 49 | 50 | cin.tie(NULL); 51 | 52 | 53 | ll n,q; 54 | cin>>n>>q; 55 | // cout<<"YES"<>x; 61 | st(i,x,0,0,n); 62 | } 63 | // cout<<"YES"<>tp; 68 | if(tp==1){ 69 | ll i,val; 70 | cin>>i>>val; 71 | i--; 72 | st(i,val,0,0,n); 73 | continue; 74 | } 75 | ll l,r; 76 | cin>>l>>r; 77 | l--; 78 | // r--; 79 | ll ans=sum(l,r,0,0,n); 80 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | // ll st[200005][25]; 16 | vector seg(800005,INT_MAX); 17 | 18 | void st(ll i,ll val,ll x,ll l,ll r){ 19 | if(r-l==1){ 20 | seg[x]=val; 21 | return ; 22 | } 23 | ll mid=(l+r)/2; 24 | if(i=l && r>=rf){ 35 | return seg[x]; 36 | }else if(lf>=r || rf<=l){ 37 | return INT_MAX; 38 | } 39 | ll mid=(lf+rf)/2; 40 | 41 | return min(sum(l,r,2*x+1,lf,mid),sum(l,r,2*x+2,mid,rf)); 42 | 43 | } 44 | 45 | int main() 46 | { 47 | 48 | ios_base::sync_with_stdio(false); 49 | 50 | cin.tie(NULL); 51 | 52 | 53 | ll n,q; 54 | cin>>n>>q; 55 | // cout<<"YES"<>x; 61 | st(i,x,0,0,n); 62 | } 63 | // cout<<"YES"<>tp; 68 | if(tp==1){ 69 | ll i,val; 70 | cin>>i>>val; 71 | i--; 72 | st(i,val,0,0,n); 73 | continue; 74 | } 75 | ll l,r; 76 | cin>>l>>r; 77 | l--; 78 | // r--; 79 | ll ans=sum(l,r,0,0,n); 80 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | // ll st[200005][25]; 16 | vector seg(800005,0); 17 | 18 | void st(ll i,ll val,ll x,ll l,ll r){ 19 | if(r-l==1){ 20 | seg[x]=val; 21 | return ; 22 | } 23 | ll mid=(l+r)/2; 24 | if(i=l && r>=rf){ 35 | return seg[x]; 36 | }else if(lf>=r || rf<=l){ 37 | return 0; 38 | } 39 | ll mid=(lf+rf)/2; 40 | 41 | return sum(l,r,2*x+1,lf,mid)^sum(l,r,2*x+2,mid,rf); 42 | 43 | } 44 | 45 | int main() 46 | { 47 | 48 | ios_base::sync_with_stdio(false); 49 | 50 | cin.tie(NULL); 51 | 52 | 53 | ll n,q; 54 | cin>>n>>q; 55 | // cout<<"YES"<>x; 61 | st(i,x,0,0,n); 62 | } 63 | // cout<<"YES"<>l>>r; 69 | l--; 70 | // r--; 71 | ll ans=sum(l,r,0,0,n); 72 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | // ll st[200005][25]; 16 | vector seg(800005,0); 17 | 18 | ll st(ll i,ll x,ll l,ll r){ 19 | if(r-l==1){ 20 | return seg[x]; 21 | } 22 | ll mid=(l+r)/2; 23 | if(i=l && r>=rf){ 35 | seg[x]+=val; 36 | return ; 37 | }else if(lf>=r || rf<=l){ 38 | return; 39 | } 40 | ll mid=(lf+rf)/2; 41 | 42 | set1(l,r,val,2*x+1,lf,mid); 43 | set1(l,r,val,2*x+2,mid,rf); 44 | 45 | } 46 | 47 | int main() 48 | { 49 | 50 | ios_base::sync_with_stdio(false); 51 | 52 | cin.tie(NULL); 53 | 54 | 55 | ll n,q; 56 | cin>>n>>q; 57 | // cout<<"YES"<>x; 63 | set1(i,i+1,x,0,0,n); 64 | } 65 | // cout<<"YES"<>tp; 75 | if(tp==1){ 76 | ll a,b,u; 77 | cin>>a>>b>>u; 78 | a--; 79 | set1(a,b,u,0,0,n); 80 | continue; 81 | } 82 | ll i; 83 | cin>>i; 84 | i--; 85 | ll ans=st(i,0,0,n); 86 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | 16 | int main() 17 | { 18 | 19 | ios_base::sync_with_stdio(false); 20 | 21 | cin.tie(NULL); 22 | 23 | 24 | ll n,q; 25 | cin>>n>>q; 26 | // cout<<"YES"<> vec(n+1,vector(n+1,0)); 28 | for(ll i=0;i>s; 32 | for(ll j=0;j>y1>>x1>>y2>>x2; 66 | ll ans=vec[y2][x2]-vec[y1-1][x2]-vec[y2][x1-1]+vec[y1-1][x1-1]; 67 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | vector seg(800005,0); 15 | 16 | 17 | void set1(ll i,ll val,ll x,ll l,ll r){ 18 | if(r-l==1){ 19 | seg[x]=val; 20 | return ; 21 | } 22 | 23 | ll mid=(l+r)/2; 24 | 25 | if(i=val){ 42 | return in(val,2*x+1,l,mid); 43 | } 44 | vll+=seg[2*x+1]; 45 | return in(val,2*x+2,mid,r); 46 | 47 | } 48 | 49 | 50 | 51 | 52 | int main() 53 | { 54 | 55 | ios_base::sync_with_stdio(false); 56 | 57 | cin.tie(NULL); 58 | 59 | 60 | ll n; 61 | cin>>n; 62 | ll arr[n]; 63 | for(ll i=0;i>arr[i]; 66 | set1(i,1,0,0,n); 67 | 68 | } 69 | 70 | // for(ll i=0;i<2*n-1;i++){ 71 | // cout<>v; 80 | vll=0; 81 | 82 | ll i=in(v,0,0,n); 83 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | struct node{ 16 | ll prefix,suffix,mx,total; 17 | }; 18 | 19 | vector seg(800005, {0,0,0,0}); 20 | 21 | 22 | node merge(node a,node b){ 23 | node c; 24 | c.prefix=max(a.total+b.prefix,a.prefix); 25 | c.suffix=max(a.suffix+b.total,b.suffix); 26 | c.total=a.total+b.total; 27 | c.mx=max(a.mx,b.mx); 28 | c.mx=max(c.mx,c.suffix); 29 | c.mx=max(c.mx,c.prefix); 30 | c.mx=max(c.mx,a.suffix+b.prefix); 31 | return c; 32 | } 33 | 34 | 35 | 36 | void set1(ll i,ll val,ll x,ll l,ll r){ 37 | if(r-l==1){ 38 | seg[x].total=val; 39 | seg[x].mx=max(0ll,val); 40 | seg[x].prefix=max(0ll,val); 41 | seg[x].suffix=max(0ll,val); 42 | return ; 43 | } 44 | ll mid=(l+r)/2; 45 | 46 | if(i=l && rf<=r){ 57 | return seg[x]; 58 | }else if(lf>=r || rf<=l){ 59 | return {0,0,0,0}; 60 | } 61 | ll mid=(lf+rf)/2; 62 | return merge(ans(l,r,2*x+1,lf,mid),ans(l,r,2*x+2,mid,rf)); 63 | } 64 | 65 | 66 | 67 | 68 | 69 | int main() 70 | { 71 | 72 | ios_base::sync_with_stdio(false); 73 | 74 | cin.tie(NULL); 75 | 76 | ll n, q; 77 | cin >> n >> q; 78 | 79 | for (ll i = 0; i < n; i++) 80 | { 81 | ll x; 82 | cin>>x; 83 | 84 | set1(i,x,0,0,n); 85 | } 86 | 87 | while(q--){ 88 | ll tp; 89 | cin>>tp; 90 | if(tp==1){ 91 | ll i,u; 92 | cin>>i>>u; 93 | i--; 94 | set1(i,u,0,0,n); 95 | continue; 96 | } 97 | ll a,b; 98 | cin>>a>>b; 99 | a--; 100 | 101 | node an=ans(a,b,0,0,n); 102 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | 15 | vector seg(800005,INT_MAX); 16 | vector seg1(800005,INT_MAX); 17 | 18 | 19 | 20 | 21 | void set1(ll i,ll val,ll x,ll l,ll r){ 22 | if(r-l==1){ 23 | seg[x]=val; 24 | return ; 25 | } 26 | ll mid=(l+r)/2; 27 | 28 | if(i> n >> q; 98 | 99 | for (ll i = 0; i < n; i++) 100 | { 101 | ll x; 102 | cin>>x; 103 | 104 | 105 | 106 | set1(i,x,0,0,n); 107 | set2(n-i-1,x,0,0,n); 108 | } 109 | 110 | while(q--){ 111 | 112 | ll tp; 113 | cin>>tp; 114 | if(tp==1){ 115 | ll i,val; 116 | cin>>i>>val; 117 | i--; 118 | set1(i,val,0,0,n); 119 | set2(n-i-1,val,0,0,n); 120 | continue; 121 | } 122 | 123 | ll x; 124 | cin>>x; 125 | 126 | x--; 127 | ll an=ans(x,0,0,n); 128 | ll an1=ans1(n-x-1,0,0,n); 129 | an=min(an,an1); 130 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | #define mod 1000000007 15 | 16 | struct TrieNode{ 17 | struct TrieNode *child[26]; 18 | bool isend; 19 | 20 | TrieNode(){ 21 | isend=false; 22 | 23 | for(ll i=0;i<26;i++){ 24 | child[i]=NULL; 25 | } 26 | } 27 | }; 28 | 29 | 30 | 31 | void insert(string s,struct TrieNode *root){ 32 | struct TrieNode *curr= root; 33 | 34 | ll n=s.length(); 35 | for(ll i=0;ichild[in]==NULL){ 38 | curr->child[in]=new TrieNode(); 39 | } 40 | 41 | curr=curr->child[in]; 42 | 43 | } 44 | 45 | curr->isend=true; 46 | } 47 | 48 | 49 | 50 | 51 | int main(){ 52 | 53 | string s; 54 | cin>>s; 55 | ll n=s.length(); 56 | 57 | ll k; 58 | cin>>k; 59 | struct TrieNode *root = new TrieNode(); 60 | for(ll i=0;i>dic; 63 | reverse(dic.begin(),dic.end()); 64 | insert(dic,root); 65 | 66 | 67 | } 68 | 69 | 70 | vector dp(n+1,0); 71 | dp[0]=1; 72 | 73 | for(ll i=1;i<=n;i++){ 74 | string ss=""; 75 | struct TrieNode *curr =root; 76 | 77 | for(ll j=i;j>=1;j--){ 78 | char ch=s[j-1]; 79 | // cout<child[in]==NULL){ 85 | break; 86 | } 87 | curr=curr->child[in]; 88 | if(curr->isend){ 89 | // cout<<"YES"< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | #define mod 1000000007 15 | 16 | 17 | int main(){ 18 | string s; 19 | cin>>s; 20 | ll n=s.length(); 21 | 22 | ll x=0; 23 | ll y=0; 24 | vector zrr(n,0); 25 | s+='*'; 26 | for(ll i=1;i=1;i--){ 43 | if(i+zrr[i]==n){ 44 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | #define mod 1000000007 15 | 16 | 17 | int main(){ 18 | string s; 19 | cin>>s; 20 | ll n=s.length(); 21 | 22 | ll x=0; 23 | ll y=0; 24 | vector zrr(n,0); 25 | s+='*'; 26 | for(ll i=1;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | #define mod 1000000007 15 | 16 | 17 | int main(){ 18 | string s,t; 19 | cin>>s>>t; 20 | ll val=t.length(); 21 | t+="#"; 22 | t+=s; 23 | ll n=t.length(); 24 | vector dp(n,0); 25 | dp[0]=0; 26 | ll ans=0; 27 | for(ll i=1;i0 && t[temp]!=t[i]){ 31 | temp=dp[temp-1]; 32 | } 33 | 34 | dp[i]=temp; 35 | if(t[i]==t[temp]){ 36 | dp[i]++; 37 | } 38 | 39 | 40 | if(dp[i]==val){ 41 | ans++; 42 | } 43 | } 44 | cout< pmfactor; 4 | 5 | void SieveOfEratosthenes(ll n) 6 | { 7 | vector prime(n + 1, true); 8 | // memset(prime, true, sizeof(prime)); 9 | 10 | for (ll p = 2; p * p <= n; p++) 11 | { 12 | if (prime[p] == true) 13 | { 14 | for (ll i = p * p; i <= n; i += p) 15 | { 16 | prime[i] = false; 17 | } 18 | } 19 | } 20 | 21 | prime[1] = true; 22 | 23 | // pmfactor.push_back(1); 24 | for (ll i = 2; i <= n; i++) 25 | { 26 | if (prime[i]) 27 | { 28 | pmfactor.push_back(i); 29 | } 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /Templates/binar_lifting.cpp: -------------------------------------------------------------------------------- 1 | 2 | 3 | ll dp[200005][20]; 4 | 5 | 6 | 7 | void binlift(){ 8 | for(ll i=1;i<20;i++){ 9 | for(ll j=0;j=0;i--){ 25 | if((k>>i)&1){ 26 | // cout<0;i--){ 70 | inver[i-1]=inver[i]*i; 71 | inver[i-1]%=m; 72 | } 73 | 74 | 75 | 76 | } 77 | 78 | 79 | ll nCr(ll n,ll r){ 80 | return (((fact[n]*inver[r])%m)*inver[n-r])%m; 81 | } 82 | -------------------------------------------------------------------------------- /Templates/nCr-main: -------------------------------------------------------------------------------- 1 | 2 | 3 | ll power(ll a,ll b){ 4 | ll val=a; 5 | 6 | 7 | ll ans=1; 8 | 9 | ll temp=b; 10 | while(temp!=0){ 11 | if(temp%2){ 12 | ans*=(val); 13 | ans%=mod; 14 | } 15 | val*=val; 16 | val%=mod; 17 | temp/=2; 18 | } 19 | 20 | return ans; 21 | 22 | 23 | 24 | 25 | } 26 | 27 | ll sum(ll x,ll y){ 28 | 29 | return (x%mod + y%mod)%mod; 30 | 31 | } 32 | 33 | 34 | ll mul(ll x,ll y){ 35 | 36 | return ((x%mod)*(y%mod))%mod; 37 | 38 | } 39 | 40 | 41 | ll subs(ll x,ll y){ 42 | return (x%mod - y%mod + mod)%mod; 43 | } 44 | 45 | 46 | 47 | ll fact[3000005]; 48 | ll inver[3000005]; 49 | 50 | void calculate(){ 51 | // cout<<"YES"<0;i--){ 64 | inver[i-1]=inver[i]*i; 65 | inver[i-1]%=mod; 66 | } 67 | 68 | 69 | 70 | } 71 | 72 | 73 | ll nCr(ll n,ll r){ 74 | return (((fact[n]*inver[r])%mod)*inver[n-r])%mod; 75 | } 76 | 77 | -------------------------------------------------------------------------------- /Templates/nCr.cpp: -------------------------------------------------------------------------------- 1 | ll fact[500005]; 2 | 3 | ll sum(ll x,ll y){ 4 | return (x%mod + y%mod)%mod; 5 | } 6 | 7 | ll mul(ll x,ll y){ 8 | return ((x%mod)*(y%mod))%mod; 9 | } 10 | 11 | 12 | ll modInverse(ll a, ll m) 13 | { 14 | ll m0 = m; 15 | ll y = 0, x = 1; 16 | 17 | if (m == 1) 18 | return 0; 19 | 20 | while (a > 1) { 21 | ll q = a / m; 22 | ll t = m; 23 | m = a % m, a = t; 24 | t = y; 25 | y = (x - mul(q, y)+mod)%mod; 26 | x = t; 27 | } 28 | 29 | if (x < 0) 30 | x = sum(x,m0); 31 | 32 | return x; 33 | } 34 | 35 | 36 | ll ncr(ll n,ll r){ 37 | ll ans=(fact[n]); 38 | ans=mul(ans,modInverse(fact[n-r],mod)); 39 | ans=mul(ans,modInverse(fact[r],mod)); 40 | return ans; 41 | } 42 | -------------------------------------------------------------------------------- /Templates/segtree.cpp: -------------------------------------------------------------------------------- 1 | #define ll long long 2 | #define mod 998244353 3 | 4 | vector seg(800005,-1e17); 5 | 6 | void update(ll i,ll val,ll x,ll l,ll r){ 7 | if(r-l==1){ 8 | seg[x]=val; 9 | return; 10 | } 11 | ll mid=(r+l)/2; 12 | if(i=l && rf<=r){ 23 | return seg[x]; 24 | }else if(rf<=l || lf>=r){ 25 | return -1e17; 26 | } 27 | 28 | ll mid=(lf+rf)/2; 29 | return max(query(l,r,2*x+1,lf,mid),query(l,r,2*x+2,mid,rf)); 30 | } 31 | -------------------------------------------------------------------------------- /cses graph/1192 CountingRooms.cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // give me some sunshine, give me some rain, give me another chance to grow up once again.... 6 | 7 | // sab moh maya hai.... 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll long long 13 | ll n, m; 14 | vector vec(1005); 15 | 16 | vector> visited(1005, vector(1005, false)); 17 | 18 | bool issafe(ll x, ll y) 19 | { 20 | 21 | if (x >= 0 && y >= 0 && x <= n - 1 && y <= m - 1 && !visited[x][y] && vec[x][y] == '.') 22 | { 23 | return true; 24 | } 25 | return false; 26 | } 27 | 28 | ll xrr[4] = {-1, 0, 0, 1}; 29 | ll yrr[4] = {0, -1, 1, 0}; 30 | 31 | int main() 32 | { 33 | ios_base::sync_with_stdio(false); 34 | cin.tie(NULL); 35 | cin >> n >> m; 36 | for (ll i = 0; i < n; i++) 37 | { 38 | string s; 39 | cin >> s; 40 | vec[i] = s; 41 | } 42 | 43 | ll ans = 0; 44 | queue> q; 45 | 46 | for (ll i = 0; i < n; i++) 47 | { 48 | for (ll j = 0; j < m; j++) 49 | { 50 | 51 | if (!visited[i][j] && vec[i][j] == '.') 52 | { 53 | 54 | bool flag = true; 55 | visited[i][j] = true; 56 | ans++; 57 | q.push({i, j}); 58 | 59 | while (!q.empty()) 60 | { 61 | pair pr=q.front(); 62 | q.pop(); 63 | 64 | 65 | ll x =pr.first; 66 | ll y =pr.second; 67 | 68 | for (ll k = 0; k < 4; k++) 69 | { 70 | ll X = x + xrr[k]; 71 | ll Y = y + yrr[k]; 72 | if (issafe(X, Y)) 73 | { 74 | q.push({X, Y}); 75 | visited[X][Y] = true; 76 | } 77 | } 78 | } 79 | 80 | } 81 | } 82 | 83 | 84 | } 85 | 86 | // for(ll i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll n,m; 15 | vector grid(1005); 16 | 17 | pair par[1005][1005]; 18 | 19 | bool issafe(ll x,ll y){ 20 | if(x>=0 && y>=0 && x>n>>m; 38 | ll stx,sty; 39 | 40 | for(ll i=0;i>grid[i]; 42 | for(ll j=0;j> q; 52 | 53 | q.push({stx,sty}); 54 | bool flag=false; 55 | ll X,Y; 56 | while(!q.empty()){ 57 | pair pr=q.front(); 58 | q.pop(); 59 | 60 | for(ll i=0;i<4;i++){ 61 | ll x=pr.first+xrr[i]; 62 | ll y=pr.second+yrr[i]; 63 | 64 | if(issafe(x,y)){ 65 | q.push({x,y}); 66 | par[x][y]={pr.first,pr.second}; 67 | if(grid[x][y]=='B'){ 68 | X=x,Y=y; 69 | flag=true; 70 | break; 71 | } 72 | grid[x][y]='#'; 73 | } 74 | 75 | } 76 | 77 | if(flag){ 78 | break; 79 | } 80 | } 81 | 82 | if(!flag){ 83 | cout<<"NO"< pr=par[X][Y]; 92 | 93 | ll xr=X-pr.first; 94 | ll yr=Y-pr.second; 95 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll n, m; 15 | 16 | void dijkastra(vector>> graph, vector &shortest,ll nd) 17 | { 18 | priority_queue, vector>, greater>> pq; 19 | pq.push({0, nd}); 20 | 21 | while (!pq.empty()) 22 | { 23 | pair p = pq.top(); 24 | pq.pop(); 25 | if (shortest[p.second] == -1) 26 | { 27 | shortest[p.second] = p.first; 28 | for (auto i : graph[p.second]) 29 | { 30 | if (shortest[i.first] == -1) 31 | { 32 | pq.push({i.second + p.first, i.first}); 33 | } 34 | } 35 | } 36 | } 37 | } 38 | 39 | int main() 40 | { 41 | ios_base::sync_with_stdio(false); 42 | cin.tie(NULL); 43 | cin >> n >> m; 44 | 45 | vector>> graphf(n+1); 46 | vector>> graphr(n+1); 47 | vector shortestf(n+1, -1); 48 | vector shortestr(n+1, -1); 49 | vector,ll>> edges; 50 | for (ll i = 0; i < m; i++) 51 | { 52 | ll u, v, c; 53 | cin >> u >> v >> c; 54 | graphf[u].push_back({v, c}); 55 | graphr[v].push_back({u, c}); 56 | edges.push_back({{u,v},c}); 57 | } 58 | dijkastra(graphf,shortestf,1); 59 | dijkastra(graphr,shortestr,n); 60 | 61 | // for(ll i=1;i<=n;i++){ 62 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll n, m, k; 15 | 16 | vector> graph[100005]; 17 | vector shortest(100005, -1); 18 | 19 | int main() 20 | { 21 | ios_base::sync_with_stdio(false); 22 | cin.tie(NULL); 23 | cin >> n >> m >> k; 24 | for (ll i = 0; i < m; i++) 25 | { 26 | ll u, v, c; 27 | cin >> u >> v >> c; 28 | graph[u].push_back({v, c}); 29 | } 30 | priority_queue, vector>, greater>> pq; 31 | pq.push({0, 1}); 32 | vector ans; 33 | vector cnt(n+1,0); 34 | while (!pq.empty()) 35 | { 36 | pair p = pq.top(); 37 | pq.pop(); 38 | cnt[p.second]++; 39 | if (p.second == n) 40 | { 41 | ans.push_back(p.first); 42 | } 43 | if(cnt[n]==k){ 44 | // cout<<"YES"< 10 | using namespace std; 11 | 12 | #define ll long long 13 | 14 | ll n, m; 15 | 16 | struct edge{ 17 | ll u,v,c; 18 | }; 19 | 20 | 21 | 22 | 23 | int main() 24 | { 25 | ios_base::sync_with_stdio(false); 26 | cin.tie(NULL); 27 | cin >> n >> m; 28 | vector edges; 29 | for(ll i=0;i>u>>v>>c; 32 | edges.push_back({u,v,c}); 33 | } 34 | vector d(n+1); 35 | vector par(n+1,-1); 36 | ll x=-1; 37 | for(ll i=0;id[j.u]+j.c){ 41 | d[j.v]=d[j.u]+j.c; 42 | x=j.v; 43 | par[j.v]=j.u; 44 | } 45 | } 46 | 47 | } 48 | 49 | if(x==-1){ 50 | cout<<"NO"< vec; 55 | 56 | for(ll i=0;i 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | ll n, m; 15 | 16 | vector> graph[100005]; 17 | vector visited(100005,false); 18 | bool flag=false; 19 | vector dp(100005,-1); 20 | vector dp1(100005,-1); 21 | vector dp2(100005,INT_MAX); 22 | vector dp3(100005,0); 23 | 24 | 25 | 26 | int main() 27 | { 28 | ios_base::sync_with_stdio(false); 29 | cin.tie(NULL); 30 | cin >> n >> m; 31 | for(ll i=0;i>u>>v>>c; 34 | graph[u].push_back({v,c}); 35 | } 36 | priority_queue,vector>,greater>> pq; 37 | pq.push({0,1}); 38 | dp[1]=0; 39 | dp1[1]=1; 40 | dp2[1]=0; 41 | dp3[1]=0; 42 | while(!pq.empty()){ 43 | pair pr=pq.top(); 44 | pq.pop(); 45 | if(visited[pr.second]){ 46 | continue; 47 | } 48 | visited[pr.second]=true; 49 | for(auto i:graph[pr.second]){ 50 | if(visited[i.first]){ 51 | continue; 52 | } 53 | if(dp[i.first]==-1 || dp[i.first]>dp[pr.second]+i.second){ 54 | dp[i.first]=dp[pr.second]+i.second; 55 | dp1[i.first]=dp1[pr.second]; 56 | dp2[i.first]=dp2[pr.second]+1; 57 | dp3[i.first]=dp3[pr.second]+1; 58 | pq.push({dp[i.first],i.first}); 59 | }else if(dp[i.first]==(dp[pr.second]+i.second)){ 60 | dp1[i.first]=dp1[i.first]%mod + dp1[pr.second]%mod; 61 | dp1[i.first]%=mod; 62 | dp2[i.first]=min(dp2[i.first],dp2[pr.second]+1); 63 | dp3[i.first]=max(dp3[i.first],dp3[pr.second]+1); 64 | // pq.push({dp[i.first],i.first}); 65 | 66 | } 67 | 68 | } 69 | 70 | } 71 | 72 | // for(ll i=1;i<=n;i++){ 73 | // cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | 14 | ll n,m; 15 | 16 | vector graph[100005]; 17 | 18 | vector visited(100005,false); 19 | 20 | 21 | void dfs(ll u){ 22 | visited[u]=true; 23 | for(auto i:graph[u]){ 24 | if(!visited[i]){ 25 | dfs(i); 26 | } 27 | } 28 | } 29 | 30 | 31 | int main(){ 32 | cin>>n>>m; 33 | 34 | for(ll i=0;i>u>>v; 37 | graph[u].push_back(v); 38 | graph[v].push_back(u); 39 | } 40 | vector vec; 41 | for(ll i=1;i<=n;i++){ 42 | if(!visited[i]){ 43 | vec.push_back(i); 44 | dfs(i); 45 | 46 | } 47 | } 48 | 49 | cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | 14 | ll n, m; 15 | 16 | vector graph[100005]; 17 | 18 | vector visited(100005, false); 19 | 20 | int main() 21 | { 22 | cin >> n >> m; 23 | 24 | for (ll i = 0; i < m; i++) 25 | { 26 | ll u, v; 27 | cin >> u >> v; 28 | graph[u].push_back(v); 29 | graph[v].push_back(u); 30 | } 31 | 32 | queue q; 33 | q.push(1); 34 | vector par(n + 1, -1); 35 | 36 | while (!q.empty()) 37 | { 38 | ll u = q.front(); 39 | 40 | q.pop(); 41 | if(u==n){ 42 | break; 43 | } 44 | 45 | visited[u] = true; 46 | 47 | for (auto i : graph[u]) 48 | { 49 | if (!visited[i]) 50 | { 51 | q.push(i); 52 | visited[i]=true; 53 | par[i] = u; 54 | } 55 | } 56 | } 57 | 58 | if(par[n]==-1){ 59 | cout << "IMPOSSIBLE" << endl; 60 | return 0; 61 | } 62 | 63 | ll val=n; 64 | vector vec; 65 | while(val!=1){ 66 | vec.push_back(val); 67 | val=par[val]; 68 | } 69 | vec.push_back(1); 70 | reverse(vec.begin(),vec.end()); 71 | cout<=3 10 | 11 | #include 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll n,m; 17 | 18 | vector graph[100005]; 19 | vector visited(100005,false); 20 | vector parent(100005,-1); 21 | vector vec; 22 | 23 | 24 | void dfs(ll u,ll pr){ 25 | 26 | visited[u]=true; 27 | parent[u]=pr; 28 | if(vec.size()>=4){ 29 | 30 | return ; 31 | } 32 | 33 | for(auto i: graph[u]){ 34 | if(visited[i] && vec.size()<=3){ 35 | ll nd=u; 36 | vec.clear(); 37 | vec.push_back(i); 38 | 39 | 40 | while(nd!=i) 41 | { 42 | vec.push_back(nd); 43 | nd=parent[nd]; 44 | } 45 | vec.push_back(i); 46 | 47 | 48 | reverse(vec.begin(),vec.end()); 49 | }else{ 50 | dfs(i,u); 51 | } 52 | } 53 | 54 | 55 | } 56 | 57 | 58 | int main() 59 | { 60 | ios_base::sync_with_stdio(false); 61 | cin.tie(NULL); 62 | cin>>n>>m; 63 | 64 | for(ll i=0;i>u>>v; 67 | graph[u].push_back(v); 68 | graph[v].push_back(u); 69 | } 70 | 71 | for(ll i=1;i<=n;i++){ 72 | if(!visited[i]){ 73 | dfs(i,-1); 74 | // cout<<"NO"<=4){ 76 | cout< 12 | using namespace std; 13 | 14 | #define ll long long 15 | 16 | ll n, m; 17 | 18 | vector> graph[100005]; 19 | vector shortest(100005,-1); 20 | 21 | int main() 22 | { 23 | ios_base::sync_with_stdio(false); 24 | cin.tie(NULL); 25 | cin >> n >> m; 26 | for (ll i = 0; i < m; i++) 27 | { 28 | ll u,v,c; 29 | cin>>u>>v>>c; 30 | graph[u].push_back({v,c}); 31 | 32 | } 33 | priority_queue,vector>,greater>> pq; 34 | pq.push({0,1}); 35 | 36 | while (!pq.empty()) 37 | { 38 | pair p = pq.top(); 39 | pq.pop(); 40 | if(shortest[p.second]==-1){ 41 | shortest[p.second]=p.first; 42 | for(auto i:graph[p.second]){ 43 | if(shortest[i.first]==-1){ 44 | pq.push({i.second+p.first,i.first}); 45 | } 46 | } 47 | } 48 | 49 | } 50 | 51 | for(ll i=1;i<=n;i++){ 52 | cout< 16 | using namespace std; 17 | 18 | #define ll long long 19 | #define INF 1e15 20 | 21 | ll n, m,q; 22 | 23 | vector> dp(1001, vector(1001, INF)); 24 | 25 | int main() 26 | { 27 | ios_base::sync_with_stdio(false); 28 | cin.tie(NULL); 29 | cin >> n >> m>>q; 30 | for (ll i = 0; i < m; i++) 31 | { 32 | ll u, v, c; 33 | cin >> u >> v >> c; 34 | dp[u][v]=min(dp[u][v],c); 35 | dp[v][u]=min(dp[v][u],c); 36 | 37 | } 38 | 39 | 40 | for(ll i=1;i<=n;i++){ 41 | dp[i][i]=0; 42 | } 43 | 44 | for(ll i=1;i<=n;i++){ 45 | for(ll j=1;j<=n;j++){ 46 | for(ll k=1;k<=n;k++){ 47 | dp[j][k]=min(dp[j][k],dp[j][i]+dp[i][k]); 48 | 49 | } 50 | } 51 | } 52 | 53 | while(q--){ 54 | ll l,r; 55 | cin>>l>>r; 56 | if(dp[l][r] 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define INF 1e15 14 | ll n,m; 15 | 16 | struct ed 17 | { 18 | ll u,v,c; 19 | }; 20 | 21 | vector graphf[2505]; 22 | vector graphr[2505]; 23 | vector vis1(2505,false); 24 | vector visn(2505,false); 25 | 26 | void dfs(ll v){ 27 | vis1[v]=true; 28 | for(auto u:graphf[v]){ 29 | if(!vis1[u]){ 30 | dfs(u); 31 | } 32 | } 33 | } 34 | void dfs1(ll v){ 35 | visn[v]=true; 36 | for(auto u:graphr[v]){ 37 | if(!visn[u]){ 38 | dfs1(u); 39 | } 40 | } 41 | } 42 | 43 | int main() 44 | { 45 | ios_base::sync_with_stdio(false); 46 | cin.tie(NULL); 47 | cin >> n >> m; 48 | 49 | vector edges; 50 | for (ll i = 0; i < m; i++) 51 | { 52 | ll u, v, c; 53 | cin >> u >> v >> c; 54 | graphf[u].push_back(v); 55 | graphr[v].push_back(u); 56 | edges.push_back({u,v,c}); 57 | } 58 | // cout<<"YES"< d(n+1,INT_MIN); 63 | d[1]=0; 64 | ll ans=-1; 65 | bool flag=false; 66 | for(ll j=0;jINT_MIN){ 71 | if(vis1[nd.v] && visn[nd.v] && d[nd.v]< d[nd.u]+nd.c){ 72 | d[nd.v]= d[nd.u]+nd.c; 73 | flag=true; 74 | } 75 | } 76 | } 77 | if(j==n-1){ 78 | ans=d[n]; 79 | } 80 | 81 | } 82 | if(flag || d[n]==INT_MIN){ 83 | cout<<"-1"< 17 | using namespace std; 18 | 19 | #define ll long long 20 | #define mod 1000000007 21 | ll n,m; 22 | 23 | 24 | vector> graph[200005]; 25 | vector visited(200005, false); 26 | 27 | 28 | int main() 29 | { 30 | ios_base::sync_with_stdio(false); 31 | cin.tie(NULL); 32 | 33 | // ll n; 34 | cin >> n>>m; 35 | 36 | for (ll i = 0; i > u >> v>>c; 40 | graph[u].push_back({v,c}); 41 | graph[v].push_back({u,c}); 42 | 43 | } 44 | priority_queue,vector>,greater>> pq; 45 | pq.push({0,1}); 46 | ll ans=0; 47 | while(!pq.empty()){ 48 | pair pr=pq.top(); 49 | pq.pop(); 50 | 51 | if(visited[pr.second]){ 52 | continue; 53 | } 54 | visited[pr.second]=true; 55 | ans+=pr.first; 56 | 57 | for(auto i:graph[pr.second]){ 58 | if(!visited[i.first]){ 59 | pq.push({i.second,i.first}); 60 | } 61 | } 62 | } 63 | for(ll i=1;i<=n;i++){ 64 | if(!visited[i]){ 65 | cout<<"IMPOSSIBLE"< 14 | using namespace std; 15 | 16 | #define ll long long 17 | #define mod 1000000007 18 | ll n,m; 19 | 20 | vector fn(200005,0); 21 | vector cnt(2000005,0); 22 | 23 | vector vec[200005]; 24 | 25 | 26 | ll mx; 27 | ll sz=1; 28 | 29 | 30 | void unite(ll u,ll v){ 31 | // cout<> n>>m; 74 | 75 | for(ll i=1;i<=n;i++){ 76 | fn[i]=i; 77 | cnt[i]=1; 78 | vec[i].push_back(i); 79 | } 80 | // cout<>u>>v; 87 | // mx--; 88 | unite(u,v); 89 | cout< 10 | using namespace std; 11 | 12 | #define ll int 13 | 14 | ll n, m; 15 | 16 | vector graph[100005]; 17 | vector visited(100005,false); 18 | bool flag=false; 19 | vector order; 20 | vector ans; 21 | vector visited1(100005,0); 22 | ll x=-1; 23 | void dfs1(ll v){ 24 | if(flag){ 25 | 26 | return ; 27 | } 28 | visited1[v]=1; 29 | // cout<> n >> m; 61 | for(ll i=0;i>u>>v; 64 | graph[u].push_back(v); 65 | } 66 | 67 | for(ll i=1;i<=n;i++){ 68 | if(visited1[i]==0){ 69 | dfs1(i); 70 | } 71 | if(flag){ 72 | break; 73 | } 74 | } 75 | if(flag){ 76 | cout<<"IMPOSSIBLE"< 15 | using namespace std; 16 | 17 | #define endl "\n" 18 | 19 | #define ll int 20 | 21 | 22 | int main() 23 | { 24 | ios_base::sync_with_stdio(false); 25 | cin.tie(NULL); 26 | ll n, m; 27 | cin >> n >> m; 28 | vector graph[n + 1]; 29 | vector par(n + 1, -1); 30 | vector d(n + 1, 0); 31 | for (ll i = 0; i < m; i++) 32 | { 33 | ll u, v; 34 | cin >> u >> v; 35 | graph[u].push_back(v); 36 | } 37 | d[1] = 0; 38 | par[1]=-1; 39 | priority_queue, vector>, greater>> pq; 40 | pq.push({0, 1}); 41 | while (!pq.empty()) 42 | { 43 | pair pr = pq.top(); 44 | pq.pop(); 45 | if (d[pr.second] < pr.first) 46 | { 47 | continue; 48 | } 49 | for (auto i : graph[pr.second]) 50 | { 51 | if (d[i] > d[pr.second] - 1) 52 | { 53 | d[i] = d[pr.second] - 1; 54 | pq.push({d[i], i}); 55 | par[i] = pr.second; 56 | } 57 | } 58 | } 59 | 60 | if (d[n] == 0) 61 | { 62 | cout << "IMPOSSIBLE" << endl; 63 | return 0; 64 | } 65 | cout << (-1 * d[n] + 1) << endl; 66 | vector ans; 67 | ll nd = n; 68 | while (nd != -1) 69 | { 70 | ans.push_back(nd); 71 | nd = par[nd]; 72 | } 73 | reverse(ans.begin(), ans.end()); 74 | for (auto i : ans) 75 | { 76 | cout << i << " "; 77 | } 78 | cout << endl; 79 | 80 | return 0; 81 | } 82 | -------------------------------------------------------------------------------- /cses graph/1680 longestFlightRoute(optimised).cpp: -------------------------------------------------------------------------------- 1 | // JAI BAJARANG BALI 2 | 3 | // manitianajay45 4 | 5 | // give me some sunshine, give me some rain, give me another chance to grow up once again.... 6 | 7 | // sab moh maya hai.... 8 | 9 | #include 10 | using namespace std; 11 | 12 | #define ll int 13 | 14 | ll n, m; 15 | 16 | vector graph[100005]; 17 | vector visited(100005,false); 18 | bool flag=false; 19 | vector par(100005,-1); 20 | vector d(100005,-1); 21 | 22 | 23 | void dfs(ll v){ 24 | 25 | if(v==n){ 26 | flag=true; 27 | d[v]=0; 28 | return ; 29 | } 30 | 31 | 32 | visited[v]=true; 33 | for(auto u:graph[v]){ 34 | 35 | 36 | 37 | if(!visited[u]){ 38 | dfs(u); 39 | } 40 | if(d[u]==-1){ 41 | continue; 42 | } 43 | if(d[v]< d[u]+1){ 44 | d[v]=d[u]+1; 45 | par[v]=u; 46 | } 47 | 48 | 49 | 50 | 51 | } 52 | 53 | 54 | } 55 | 56 | 57 | 58 | 59 | int main() 60 | { 61 | ios_base::sync_with_stdio(false); 62 | cin.tie(NULL); 63 | cin >> n >> m; 64 | for(ll i=0;i>u>>v; 67 | graph[u].push_back(v); 68 | } 69 | d[1]=0; 70 | 71 | 72 | dfs(1); 73 | // cout<<"-1"< ans; 81 | ll nd=1; 82 | while(nd!=-1){ 83 | ans.push_back(nd); 84 | nd=par[nd]; 85 | } 86 | // reverse(ans.begin(),ans.end()); 87 | cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | ll n, m; 15 | 16 | vector graph[100005]; 17 | vector visited(100005,false); 18 | bool flag=false; 19 | vector par(100005,-1); 20 | vector d(100005,0); 21 | 22 | ll ans=0; 23 | void dfs(ll v){ 24 | 25 | if(v==n){ 26 | flag=true; 27 | d[v]=1; 28 | return ; 29 | } 30 | 31 | 32 | visited[v]=true; 33 | ll ans=0; 34 | for(auto u:graph[v]){ 35 | if(!visited[u]){ 36 | dfs(u); 37 | } 38 | 39 | ans=ans%mod + (d[u]%mod); 40 | ans%=mod; 41 | 42 | } 43 | d[v]=ans; 44 | } 45 | int main() 46 | { 47 | ios_base::sync_with_stdio(false); 48 | cin.tie(NULL); 49 | cin >> n >> m; 50 | for(ll i=0;i>u>>v; 53 | graph[u].push_back(v); 54 | } 55 | d[1]=0; 56 | 57 | 58 | dfs(1); 59 | // cout<<"-1"< 23 | using namespace std; 24 | 25 | #define ll long long 26 | #define mod 1000000007 27 | ll n,m; 28 | 29 | vector visited(200005,false); 30 | vector graph[200005]; 31 | vector order; 32 | vector graphr[200005]; 33 | 34 | 35 | 36 | void topo(ll v){ 37 | visited[v]=true; 38 | for(auto u:graph[v]){ 39 | if(!visited[u]){ 40 | topo(u); 41 | } 42 | } 43 | 44 | order.push_back(v); 45 | } 46 | 47 | void dfs(ll v){ 48 | visited[v]=true; 49 | for(auto u:graphr[v]){ 50 | if(!visited[u]){ 51 | dfs(u); 52 | } 53 | } 54 | 55 | } 56 | 57 | 58 | 59 | int main() 60 | { 61 | ios_base::sync_with_stdio(false); 62 | cin.tie(NULL); 63 | 64 | // ll n; 65 | cin >> n>>m; 66 | 67 | for (ll i = 0; i >u>>v; 71 | graph[u].push_back(v); 72 | graphr[v].push_back(u); 73 | 74 | } 75 | topo(1); 76 | // cout<<"YES"< 14 | using namespace std; 15 | 16 | #define ll long long 17 | #define mod 1000000007 18 | ll n,m; 19 | 20 | vector visited(200005,false); 21 | vector graph[200005]; 22 | vector order; 23 | vector graphr[200005]; 24 | ll an=0; 25 | vector ans(200005,0); 26 | 27 | 28 | void topo(ll v){ 29 | visited[v]=true; 30 | for(auto u:graph[v]){ 31 | if(!visited[u]){ 32 | topo(u); 33 | } 34 | } 35 | order.push_back(v); 36 | } 37 | 38 | void dfs(ll v){ 39 | visited[v]=true; 40 | ans[v]=an; 41 | for(auto u:graphr[v]){ 42 | if(!visited[u]){ 43 | dfs(u); 44 | } 45 | } 46 | 47 | } 48 | 49 | 50 | 51 | int main() 52 | { 53 | ios_base::sync_with_stdio(false); 54 | cin.tie(NULL); 55 | 56 | // ll n; 57 | cin >> n>>m; 58 | 59 | for (ll i = 0; i >u>>v; 63 | graph[u].push_back(v); 64 | graphr[v].push_back(u); 65 | 66 | } 67 | for(ll i=1;i<=n;i++){ 68 | if(!visited[i]){ 69 | topo(i); 70 | } 71 | } 72 | // cout<<"YES"< 18 | using namespace std; 19 | 20 | #define ll long long 21 | #define mod 1000000007 22 | ll n,m; 23 | 24 | bool visited[200005][2]; 25 | string ans(200005,'*'); 26 | vector> graph[200005][2]; 27 | vector> order; 28 | vector> graphr[200005][2]; 29 | ll vis[200005][2]; 30 | ll an=0; 31 | 32 | 33 | void topo(ll v,ll tp){ 34 | visited[v][tp]=true; 35 | for(auto u:graph[v][tp]){ 36 | if(!visited[u.first][u.second]){ 37 | topo(u.first,u.second); 38 | } 39 | } 40 | order.push_back({v,tp}); 41 | } 42 | bool flag=true; 43 | 44 | void dfs(ll v,ll tp){ 45 | 46 | 47 | if(tp==0 && vis[v][1]==an){ 48 | flag=false; 49 | } 50 | if(tp==1 && vis[v][0]==an){ 51 | flag=false; 52 | } 53 | vis[v][tp]=an; 54 | if(ans[v]=='*'){ 55 | if(tp==0){ 56 | ans[v]='+'; 57 | }else{ 58 | ans[v]='-'; 59 | } 60 | } 61 | 62 | for(auto u:graphr[v][tp]){ 63 | if(vis[u.first][u.second]==0){ 64 | dfs(u.first,u.second); 65 | } 66 | } 67 | 68 | } 69 | 70 | 71 | 72 | int main() 73 | { 74 | ios_base::sync_with_stdio(false); 75 | cin.tie(NULL); 76 | 77 | // ll n; 78 | cin >> n>>m; 79 | 80 | for (ll i = 0; i >ui>>u>>vi>>v; 85 | 86 | ll fui,fvi; 87 | fui=(ui=='+')?1:0; 88 | fvi=(vi=='+')?1:0; 89 | if(fui==0){ 90 | graph[u][1].push_back({v,fvi}); 91 | graphr[v][fvi].push_back({u,1}); 92 | }else{ 93 | graph[u][0].push_back({v,fvi}); 94 | graphr[v][fvi].push_back({u,0}); 95 | } 96 | if(fvi==0){ 97 | graph[v][1].push_back({u,fui}); 98 | graphr[u][fui].push_back({v,1}); 99 | }else{ 100 | graph[v][0].push_back({u,fui}); 101 | graphr[u][fui].push_back({v,0}); 102 | } 103 | 104 | 105 | } 106 | for(ll i=1;i<=m;i++){ 107 | if(!visited[i][0]){ 108 | topo(i,0); 109 | } 110 | if(!visited[i][1]){ 111 | topo(i,1); 112 | } 113 | } 114 | 115 | reverse(order.begin(),order.end()); 116 | 117 | for(auto i:order){ 118 | if(vis[i.first][i.second]==0){ 119 | an++; 120 | dfs(i.first,i.second); 121 | if(!flag){ 122 | break; 123 | } 124 | // an++; 125 | } 126 | } 127 | if(!flag){ 128 | cout<<"IMPOSSIBLE"< 24 | using namespace std; 25 | 26 | #define ll int 27 | 28 | ll n, m; 29 | 30 | vector graph[100005]; 31 | 32 | vector visited(100005, false); 33 | 34 | int main() 35 | { 36 | cin >> n >> m; 37 | vector> edges; 38 | for (ll i = 0; i < m; i++) 39 | { 40 | ll u, v; 41 | cin >> u >> v; 42 | graph[u].push_back(v); 43 | graph[v].push_back(u); 44 | edges.push_back({u,v}); 45 | } 46 | 47 | queue q; 48 | vector ans(n + 1, 1); 49 | for (ll i = 1; i <= n; i++) 50 | { 51 | if (!visited[i]) 52 | { 53 | while (!q.empty()) 54 | { 55 | q.pop(); 56 | } 57 | q.push(i); 58 | q.push(-1); 59 | ll an = 0; 60 | while (q.size() > 1) 61 | { 62 | ll u = q.front(); 63 | q.pop(); 64 | if (u == -1) 65 | { 66 | an++; 67 | q.push(-1); 68 | continue; 69 | } 70 | 71 | if (an % 2 == 1) 72 | { 73 | ans[u] = 2; 74 | } 75 | 76 | visited[u] = true; 77 | for (auto i : graph[u]) 78 | { 79 | if (!visited[i]) 80 | { 81 | q.push(i); 82 | visited[i] = true; 83 | } 84 | } 85 | } 86 | } 87 | } 88 | bool flag=false; 89 | for(ll i=0;i 16 | using namespace std; 17 | 18 | #define ll long long 19 | #define mod 1000000007 20 | ll n,m; 21 | 22 | vector visited(200005,false); 23 | vector graph[200005]; 24 | vector order; 25 | vector graphr[200005]; 26 | set gph[200005]; 27 | vector vis(200005,0); 28 | vector vec(200005,0); 29 | 30 | ll an=0; 31 | ll weight[200005]; 32 | ll val=0; 33 | 34 | vector ans(200005,-1); 35 | 36 | 37 | void topo(ll v){ 38 | visited[v]=true; 39 | for(auto u:graph[v]){ 40 | if(!visited[u]){ 41 | topo(u); 42 | } 43 | } 44 | order.push_back(v); 45 | } 46 | bool flag=true; 47 | 48 | void dfs(ll v){ 49 | // cout<> n>>m; 88 | 89 | for(ll i=1;i<=n;i++){ 90 | cin>>weight[i]; 91 | } 92 | 93 | vector> edges; 94 | 95 | for (ll i = 0; i < m; i++) 96 | { 97 | ll u,v; 98 | cin>>u>>v; 99 | graph[u].push_back(v); 100 | graphr[v].push_back(u); 101 | edges.push_back({u,v}); 102 | 103 | } 104 | for(ll i=1;i<=n;i++){ 105 | if(!visited[i]){ 106 | topo(i); 107 | } 108 | } 109 | 110 | reverse(order.begin(),order.end()); 111 | 112 | // vec.push_back(0); 113 | for(auto i:order){ 114 | if(vis[i]==0){ 115 | an++; 116 | val=0; 117 | dfs(i); 118 | vec[an]=val; 119 | 120 | } 121 | } 122 | 123 | for(ll i=1;i<=an;i++){ 124 | if(ans[i]==-1){ 125 | // cout< 10 | using namespace std; 11 | 12 | #define ll long long 13 | #define mod 1000000007 14 | 15 | vector graph[200005]; 16 | 17 | vector ans(200005,0); 18 | 19 | vector visited(200005,false); 20 | 21 | ll dp[200005][31]; 22 | 23 | ll n,q; 24 | 25 | 26 | 27 | void binlift(){ 28 | for(ll i=1;i<31;i++){ 29 | for(ll j=1;j<=n;j++){ 30 | dp[j][i]=dp[dp[j][i-1]][i-1]; 31 | } 32 | } 33 | } 34 | 35 | ll query(ll x,ll k){ 36 | ll prev=x; 37 | for(ll i=31;i>=0;i--){ 38 | if((k>>i)&1){ 39 | // cout<>n>>q; 55 | ll arr[n+1]; 56 | memset(dp,-1,sizeof(dp)); 57 | for(ll i=1;i<=n;i++){ 58 | cin>>arr[i]; 59 | dp[i][0]=arr[i]; 60 | 61 | } 62 | // for(ll i=1;i<=n;i++) 63 | // { 64 | // for(ll j=0;j<=3;j++){ 65 | // cout<>x>>k; 75 | 76 | ll ans=query(x,k); 77 | cout< 22 | using namespace std; 23 | 24 | #define ll long long 25 | #define mod 1000000007 26 | ll n; 27 | 28 | 29 | vector graph[200005]; 30 | vector visited(200005,0); 31 | vector par(200005,-1); 32 | vector> ans(200005,{0,false}); 33 | ll cl=1; 34 | void dfs(ll v){ 35 | visited[v]=cl; 36 | for(auto u:graph[v]){ 37 | if(visited[u]==0){ 38 | par[u]=v; 39 | dfs(u); 40 | } 41 | 42 | if(visited[u]==cl){ 43 | ll st=v; 44 | ll cyc=0; 45 | while(st!=u){ 46 | cyc++; 47 | st=par[st]; 48 | } 49 | st=v; 50 | cyc++; 51 | while(st!=u){ 52 | ans[st].first=cyc; 53 | st=par[st]; 54 | } 55 | // cyc++; 56 | ans[st].first=cyc; 57 | ans[st].second=true; 58 | ll prev=st; 59 | while(st!=-1){ 60 | prev=st; 61 | st=par[st]; 62 | if(!ans[st].second){ 63 | ans[st].first=ans[prev].first+1; 64 | ans[st].second=true; 65 | } 66 | } 67 | }else if(visited[u]!=(-1*cl)){ 68 | // cout<<"UES"<> n; 95 | 96 | for (ll i = 1; i <=n; i++) 97 | { 98 | ll x; 99 | cin>>x; 100 | 101 | graph[i].push_back(x); 102 | } 103 | for(ll i=1;i<=n;i++){ 104 | if(visited[i]==0){ 105 | dfs(i); 106 | cl++; 107 | } 108 | } 109 | 110 | 111 | for(ll i=1;i<=n;i++){ 112 | cout<