Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ull unsigned long long
- #define pi 3.141592654
- #define NUM 1e18
- #define Mod 1'000'000'007
- #define fixed(n) fixed<<setprecision(n)
- #define cin(v) for(auto &i:v) cin >> i ;
- #define cout(v) for(auto &i:v) cout << i <<" ";
- #define vowel(x) (x=='e'||x=='a'||x=='i'||x=='o'||x=='u')
- #define small(x) (x>=97&&x<=122)
- #define capital(x) (x>=65&&x<=90)
- #define Tolower(s) transform(s.begin(),s.end(),s.begin(),::tolower);
- #define Toupper(s) transform(s.begin(),s.end(),s.begin(),::toupper);
- #define sz(x) (int)(x.size())
- #define all(v) ((v).begin()), ((v).end())
- #define allr(v) ((v).rbegin()), ((v).rend())
- #define updmax(a,b) a=max(a,b)
- #define updmin(a,b) a=min(a,b)
- #define ceil(a,b) ((a/b)+(a%b?1:0))
- /* asc -> 1 2 3 ,des -> 3 2 1 */
- /******************************************************************************/
- using namespace std;
- void Rofyda_Elghadban(){
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- }
- /******************************************************************************/
- /*Monotonic Stack "Next Greater Element" Zero base*/
- vector<int>monotonic_stack(int n,vector<int>&v){
- int sz=v.size();
- vector<int>ans(sz);
- for(int i=0;i<ans.size();i++){
- ans[i]=-1;
- }
- stack<int>s;
- s.push(0);
- int i=1;
- while(i<v.size()){
- while(s.size()!=0&&v[s.top()]<v[i]){
- ans[s.top()]=i;
- s.pop();
- }
- s.push(i);
- i++;
- }
- return ans;
- }
- /******************************************************************************/
- /*Monotonic Stack "Next Smaller Element" Zero base*/
- vector<int>monotonic_stack(int n,vector<int>&v){
- int sz=v.size();
- vector<int>ans(sz);
- for(int i=0;i<ans.size();i++){
- ans[i]=-1;
- }
- stack<int>s;
- s.push(0);
- int i=1;
- while(i<v.size()){
- while(s.size()!=0&&v[s.top()]>v[i]){
- ans[s.top()]=i;
- s.pop();
- }
- s.push(i);
- i++;
- }
- return ans;
- }
- /******************************************************************************/
- /*Monotonic Stack "Previous Smaller Element" Zero base*/
- vector<int>monotonic_stack(int n,vector<int>&v){
- int sz=v.size();
- vector<int>ans(sz);
- for(int i=0;i<ans.size();i++){
- ans[i]=-1;
- }
- stack<int>s;
- s.push(v.size()-1);
- int i=v.size()-1;
- while(i>=1){
- while(s.size()!=0&&v[s.top()]>v[i]){
- ans[s.top()]=i;
- s.pop();
- }
- s.push(i);
- i--;
- }
- return ans;
- }
- /******************************************************************************/
- /*Monotonic Stack "Previous Greater Element" Zero base*/
- vector<int>monotonic_stack(int n,vector<int>&v){
- int sz=v.size();
- vector<int>ans(sz);
- for(int i=0;i<ans.size();i++){
- ans[i]=-1;
- }
- stack<int>s;
- s.push(v.size()-1);
- int i=v.size()-1;
- while(i>=1){
- while(s.size()!=0&&v[s.top()]<v[i]){
- ans[s.top()]=i;
- s.pop();
- }
- s.push(i);
- i--;
- }
- return ans;
- }
- /******************************************************************************/
- ll gcd(ll num1,ll num2){
- while(num2!=0){
- ll temp=num1;
- num1=num2;
- num2=temp%num1;
- }
- return num1;
- }
- /******************************************************************************/
- ll lcm(ll num1,ll num2){
- return(num1/gcd(num1,num2))*num2;
- }
- /******************************************************************************/
- bool prime(ll n){
- if(n<2){
- return false;
- }for(ll i=2;i<=n/i;i++){
- if(n%i==0){
- return false;
- }
- }
- return true;
- }
- /******************************************************************************/
- vector<int>factors(int n){
- vector<int>v;
- for(int i=1;i<=n/i;i++){
- if(n%i==0){
- v.push_back(i);
- if(i!=n/i){
- v.push_back(n/i);
- }
- }
- }
- return v;
- }
- /******************************************************************************/
- vector<int>prime_factors(int n){
- vector<int>v;
- for(int i=2;i<=n/i;i++){
- while(n%i==0){
- n/=i;
- v.push_back(i);
- }
- }
- if(n!=1){
- v.push_back(n);
- }
- return v;
- }
- /******************************************************************************/
- void binary(ll n){
- ll x=n;
- string s="";
- while(n>0){
- if(n%2==0){
- s+=to_string(0);
- }else{
- s+=to_string(1);
- }
- n/=2;
- }
- ll sum=0;
- for(int i=0;i<s.size();i++){
- sum+=s[i]-'0';
- }
- if(x%sum==0){
- cout<<"YES"<<endl;
- }else{
- cout<<"NO"<<endl;
- }
- }
- /******************************************************************************/
- /*Print num data type(__int 128)*/
- void print(__int 128 x){
- string num;
- while(x){
- num.push_back(x%10+'0');
- x/=10;
- }
- reverse(all(num));
- cout<<num<<"\n";
- }
- /******************************************************************************/
- ll add(ll a,ll b,ll m){
- return ((a%m)+(b%m))%m;
- }
- /******************************************************************************/
- ll sub(ll a,ll b,ll m){
- return ((a%m)-(b%m)+m)%m;
- }
- /******************************************************************************/
- ll mul(ll a,ll b,ll m){
- return ((a%m)*(b%m))%m;
- }
- /******************************************************************************/
- /*MEX: is the smallest whole number that is not present in the array.*/
- int mex(int n,vector<int>&v){
- sort(v.begin(),v.end());
- int mex=0;
- for(int i=0;i<n;i++){
- if(v[i]==mex){
- mex++;
- }
- }
- return mex;
- }
- /******************************************************************************/
- /*Next_Permutation*/
- vector<vector<int>>nextpermutation(int n,vector<int>&v){
- ll size=1;
- for(int i=1;i<=n;i++){
- size*=i;
- }
- vector<vector<int>>ans(size);
- int counter=0;
- sort(v.begin(),v.end());
- do{
- for(int i=0;i<n;i++){
- ans[counter].push_back(v[i]);
- }
- counter++;
- }while(next_permutation(v.begin(),v.end()));
- return ans;
- }
- /******************************************************************************/
- /*Prev_Permutation*/
- vector<vector<int>>prevpermutation(int n,vector<int>&v){
- ll size=1;
- for(int i=1;i<=n;i++){
- size*=i;
- }
- vector<vector<int>>ans(size);
- int counter=0;
- sort(v.begin(),v.end());
- reverse(v.begin(),v.end());
- do{
- for(int i=0;i<n;i++){
- ans[counter].push_back(v[i]);
- }
- counter++;
- }while(prev_permutation(v.begin(),v.end()));
- return ans;
- }
- /******************************************************************************/
- /*Kadane max sum of contiguous subarray*/
- ll kadane_max_sum(int n,vector<int>&v){
- ll sum=0,ans=LLONG_MIN;
- for(int i=0;i<n;i++){
- sum+=v[i];
- ans=max(ans,sum);
- sum=max(sum,0ll);
- }
- return ans;
- }
- /******************************************************************************/
- /*Kadane min sum of contiguous subarray*/
- ll kadane_min_sum(int n,vector<int>&v){
- ll sum=0,ans=LLONG_MAX;
- for(int i=0;i<n;i++){
- sum+=v[i];
- ans=min(ans,sum);
- sum=min(sum,0ll);
- }
- return ans;
- }
- /******************************************************************************/
- /*Seive of eratosthenes*/
- bool composite[n+1];
- void sieve(){
- composite[0]=composite[1]=1;
- for(ll i=2;i<=n/i;i++){
- if(composite[i]!=1){
- for(int j=i*i;j<=n;j+=i){
- composite[j]=1;
- }
- }
- }
- }
- /******************************************************************************/
- /*n->number, x->power*/
- int bin_exp(int n,int x){
- int res=1;
- while(x>0){
- if(x%2==1){
- res*=x;
- }
- n*=n;
- x/=2;
- }
- return res;
- }
- /******************************************************************************/
- /* (n*n)->long long,int "%m" */
- int modular_exp(int n,int x,int m){
- int res=1;
- while(x>0){
- if(x%2==1){
- res=(res*n)%m;
- }
- n=(n%m*n%m)%m;
- x/=2;
- }
- return res;
- }
- /******************************************************************************/
- void solve(){
- }
- int main(){
- Rofyda_Elghadban();
- int t=1;
- // cin>>t;
- while(t--){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement