Submission #1293134

#TimeUsernameProblemLanguageResultExecution timeMemory
1293134cansu_mutluMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
393 ms205652 KiB
#include<bits/stdc++.h>
#define int long long 
using namespace std;
struct vertex
{
    int sum = 0, lazy = 0;
    vertex *leftcocuk = nullptr,*rightcocuk = nullptr;
};
void apply(vertex *node,int len, int val)
{
    if(val==1)
    {
        node->lazy = val;
        node->sum = len*val;
    }
}
void push(vertex *node,int l,int r)
{
    if(l==r) return;
    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
    {
        int mid = l+r;
        mid/=2;
        push(node,l,r);
        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 bul( vertex *node,int l,int r,int x,int y)
{
    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 += bul(node->leftcocuk,l,mid,x,y);
    if(y>=mid+1) ans+= bul(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 m;
    int n = 1e9+1;
    cin>> m;
    int c = 0;
    vertex v;
    while(m--)
    {
        int num,x,y;
        cin >> num >> x >> y;
        if(num==1)
        {
            c = bul(&v,1,n,x+c,y+c);
            cout << c << endl;
        }
        else 
        {
            degis(&v,1,n,x+c,y+c,1);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...