답안 #751300

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
751300 2023-05-31T11:11:02 Z amin Growing Trees (BOI11_grow) C++14
100 / 100
179 ms 4548 KB
#include <bits/stdc++.h>

using namespace std;

#define ll long long

int seg[4000000];
int laz[4000000];
int a[4000003];
int z;
int b[4000003];
int ans=0;
int n;
void merg(int v,int v1,int v2)
{

  seg[v]=max(seg[v1],seg[v2]);


}
void build(int v,int tl,int tr)
{
    if(tl==tr)
    {
        seg[v]=a[tl];
        return ;
    }
    int tm=(tl+tr)/2;
    build(v*2,tl,tm);
    build(v*2+1,tm+1,tr);
    merg(v,v*2,v*2+1);
}

void push(int v)
{
    laz[v*2]+=laz[v];
    seg[v*2]+=laz[v];
    seg[v*2+1]+=laz[v];
    laz[v*2+1]+=laz[v];
    laz[v]=0;
}
void update(int v,int tl,int tr,int l,int r)
{
    if(l>r)
        return ;
    if(tl==l&&tr==r)
    {
      seg[v]++;
      laz[v]++;

        return ;

    }
    push(v);
    int tm=(tl+tr)>>1;
   update(v*2,tl,tm,l,min(r,tm));
   update(v*2+1,tm+1,tr,max(tm+1,l),r);
    merg(v,v*2,v*2+1);

}
int get(int v,int tl,int tr,int val)
{
    //cout<<tl<<' '<<tr<<endl;
   /* if(val<tl||val>tr)
        return 1000000;*/
     //   cout<<tl<<' '<<tr<<endl;
 if(tl==tr)
 {
     //cout<<seg[v]<<endl;
     return tl;
 }
push(v);
int tm=(tl+tr)/2;
if(seg[v*2]>=val)
{
    return get(v*2,tl,tm,val);
}else
return get(v*2+1,tm+1,tr,val);

}
int get1(int v,int tl,int tr,int pos)
{
  //  cout<<tl<<' '<<tr<<' '<<pos<<endl;
    if(pos<tl||pos>tr)
        return 1500000000;
    if(tl==tr)
        return seg[v];
    int tm=(tl+tr)>>1;
    push(v);
    return min(get1(v*2,tl,tm,pos),get1(v*2+1,tm+1,tr,pos));

}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
  //  freopen("balancing.in","r",stdin);
   // freopen("balancing.out","w",stdout);

cin>>n;
int q;
cin>>q;

for(int i=0;i<n;i++)
{
    cin>>a[i];
}
sort(a,a+n);
a[n]=1500000000;
build(1,0,n);
while(q--)
{
    char c;

    cin>>c;
        int co,mi;
    cin>>mi>>co;
    swap(mi,co);
    if(c=='F')
    {

  //  co--;
    int pos=get(1,0,n,mi);
    int en=pos+co-1;
    en=min(en,n-1);
    if(en==n-1)
    {
        update(1,0,n,pos,n);
        continue;
    }
    int val=get1(1,0,n,en);
    int st=get(1,0,n,val);
    int e=get(1,0,n,val+1);
    update(1,0,n,pos,st-1);
 //   cout<<pos<<' '<<st-1<<' '<<e-en+st-1<<' '<<e-1<<endl;
    update(1,0,n,e-(en-st+1),e-1);
    /*for(int y=0;y<n;y++)
    {
        cout<<get1(1,0,n,y)<<' ';
    }
    cout<<endl;*/

    }else
    {
        swap(mi,co);
      //  cout<<get(1,0,n,co+1)<<get(1,0,n,mi);
   // cout<<mi<<' '<<co+1<<endl;
        cout<<get(1,0,n,co+1)-get(1,0,n,mi)<<endl;
    }
}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 160 ms 3188 KB Output is correct
2 Correct 145 ms 3192 KB Output is correct
3 Correct 40 ms 4336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 340 KB Output is correct
2 Correct 7 ms 340 KB Output is correct
3 Correct 7 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 114 ms 844 KB Output is correct
6 Correct 160 ms 1732 KB Output is correct
7 Correct 7 ms 468 KB Output is correct
8 Correct 121 ms 1212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 140 ms 1052 KB Output is correct
2 Correct 138 ms 1000 KB Output is correct
3 Correct 3 ms 468 KB Output is correct
4 Correct 147 ms 1436 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 147 ms 1128 KB Output is correct
2 Correct 169 ms 1028 KB Output is correct
3 Correct 9 ms 596 KB Output is correct
4 Correct 158 ms 1148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 103 ms 1996 KB Output is correct
2 Correct 145 ms 3092 KB Output is correct
3 Correct 33 ms 1132 KB Output is correct
4 Correct 29 ms 2900 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 3124 KB Output is correct
2 Correct 141 ms 3068 KB Output is correct
3 Correct 39 ms 2792 KB Output is correct
4 Correct 33 ms 1112 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 109 ms 3136 KB Output is correct
2 Correct 110 ms 3280 KB Output is correct
3 Correct 37 ms 2948 KB Output is correct
4 Correct 32 ms 1108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 137 ms 3024 KB Output is correct
2 Correct 146 ms 4052 KB Output is correct
3 Correct 39 ms 3436 KB Output is correct
4 Correct 124 ms 3908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 143 ms 3276 KB Output is correct
2 Correct 168 ms 3148 KB Output is correct
3 Correct 135 ms 4548 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 179 ms 3468 KB Output is correct