1932C - LR-remainders - CodeForces Solution


implementation math

Please click on ads to support us..

C++ Code:

/*
ALLAH IS GREAT
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define nl "\n"
#define mod 10000007
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define mx 200005
ll arr[mx];
ll tree[mx * 3];
ll n,m;
void init(ll node, ll b, ll e)
{
    if (b == e) {
        tree[node] = arr[b];
        return;
    }
    ll Left = node * 2;
    ll Right = node * 2 + 1;
    int mid = (b + e) / 2;
    init(Left, b, mid);
    init(Right, mid + 1, e);
    tree[node] = (tree[Left] * tree[Right])%m;
}
int query(ll node, ll b, ll e, ll i, ll j)
{
    if (i > e || j < b)
        return 1; //out of range
    if (b >= i && e <= j)
        return tree[node]; //Relavent Segment
    int Left = node * 2; //divide more
    int Right = node * 2 + 1;
    int mid = (b + e) / 2;
    int p1 = query(Left, b, mid, i, j);
    int p2 = query(Right, mid + 1, e, i, j);
    return (p1 * p2)%m; //Sum of Left and Right
}
// void update(int node, int b, int e, int i, int newvalue)
// {
//     if (i > e || i < b)
//         return; //out of range
//     if (b >= i && e <= i) { //Relavent Segment
//         tree[node] = newvalue;
//         return;
//     }
//     ll Left = node * 2; //divide more
//     ll Right = node * 2 + 1;
//     ll mid = (b + e) / 2;
//     update(Left, b, mid, i, newvalue);
//     update(Right, mid + 1, e, i, newvalue);
//     tree[node] = tree[Left] + tree[Right];
// }
int main()
{
    ll t;
    cin>>t;
    while(t--)
    {
    cin >> n>>m;
    for(ll i=1;i<=n;i++)
    {
        cin>>arr[i];
    }
    init(1, 1, n);
    ll d = 1;
    ll g=n;
    ll sk=1;
    ll vk=n;
    for(ll k=1;k<=n;k++)
    {
        char ch;
        cin>>ch;
        cout << query(1, 1, n, d, g)%m << " ";
        if(ch=='L')
        {
            d++;
        }
        else if(ch=='R')
        {
            g--;
        }
    }
    cout<<nl;
}
    //update(1, 1, n, 2, 10);
    
   // update(1, 1, n, 2, 2);
   // cout << query(1, 1, n, 2, 2) << endl;
    return 0;
}


Comments

Submit
0 Comments
More Questions

202A - LLPS
978A - Remove Duplicates
1304A - Two Rabbits
225A - Dice Tower
1660D - Maximum Product Strikes Back
1513A - Array and Peaks
1251B - Binary Palindromes
768B - Code For 1
363B - Fence
991B - Getting an A
246A - Buggy Sorting
884A - Book Reading
1180A - Alex and a Rhombus
445A - DZY Loves Chessboard
1372A - Omkar and Completion
159D - Palindrome pairs
981B - Businessmen Problems
1668A - Direction Change
1667B - Optimal Partition
1668B - Social Distance
88B - Keyboard
580B - Kefa and Company
960A - Check the string
1220A - Cards
897A - Scarborough Fair
1433B - Yet Another Bookshelf
1283B - Candies Division
1451B - Non-Substring Subsequence
1408B - Arrays Sum
1430A - Number of Apartments