Submission #1293126

#TimeUsernameProblemLanguageResultExecution timeMemory
1293126cansu_mutluMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
401 ms205540 KiB
#include<bits/stdc++.h>
#define int long long 
using namespace std;
struct vertex
{
    int sum = 0;
    int lazy =  0;
    vertex *leftcocuk = nullptr, *rightcocuk = nullptr;

};
void apply(vertex *node,int len,int val)
{
    if(val==1)
    {
        node->lazy = val;
        node->sum = val*len;
    }
}
void push(vertex *node,int l,int r)
{
    if(node->leftcocuk==nullptr) node->leftcocuk =new vertex;
    if(node->rightcocuk == nullptr) node->rightcocuk = new vertex;
    int mid = l+r;
    mid/=2;
    apply(node->leftcocuk,mid-l+1,node->lazy);
    apply(node->rightcocuk,r-mid,node->lazy);
}
void degis( vertex *node,int l,int r,int x,int y,int val)
{
    if(l>=x && r<=y) apply(node,r-l+1,val);
    else 
    {
        push(node,l,r);
        int mid = l+r;
        mid/=2;
        if(x<=mid) degis(node->leftcocuk,l,mid,x,y,val);
        if(y>=mid+1) degis(node->rightcocuk,mid+1,r,x,y,val);
        node->sum = node->leftcocuk->sum+node->rightcocuk->sum;
    }
}
int gt(vertex *node,int l,int r,int x,int y)
{
    //cout <<l << " "<< r << " " << x << " " << y << endl;
    if(l>=x && r<=y) return node->sum;
    int mid = l+r;
    mid/=2;
    int ans = 0;
    push(node,l,r);
    if(x<=mid) ans+= gt(node->leftcocuk,l,mid,x,y);
    if(y>=mid+1) ans+= gt(node->rightcocuk,mid+1,r,x,y);
    return ans;
}
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n;
    cin >> n;
    int c = 0;
    vertex node = {0,0};
    int mxn = 1e9+1;
    while(n--)
    {
        int num,x,y;
        cin >> num >> x >> y;
        if(num==1)
        {
            c = gt(&node,1,mxn,x+c,y+c);
            cout << c << endl;
        }
        else degis(&node,1,mxn,x+c,y+c,1);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...