이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int dizi1[500005];
int dizi2[500005];
int seg1[2000005];
int seg2[2000005];
int segment(int x,int l,int r,int bas,int son)
{
    if(r<bas||l>son)
        return 0;
    if(l>=bas&&r<=son)
        return seg1[x];
    int orta=(l+r)/2;
    return max(segment(x*2,l,orta,bas,son),segment(x*2+1,orta+1,r,bas,son));
}
int segment2(int x,int l,int r,int bas,int son)
{
    if(r<bas||l>son)
        return 0;
    if(l>=bas&&r<=son)
        return seg2[x];
    int orta=(l+r)/2;
    return max(segment2(x*2,l,orta,bas,son),segment2(x*2+1,orta+1,r,bas,son));
}
int build2(int x,int bas,int son)
{
    if(bas==son)
        return seg2[x]=dizi2[bas];
    int orta=(bas+son)/2;
    seg2[2*x]=build2(2*x,bas,orta);
    seg2[2*x+1]=build2(2*x+1,orta+1,son);
        return seg2[x]=max(seg2[2*x],seg2[2*x+1]);
}
int build(int x,int bas,int son)
{
    if(bas==son)
        return seg1[x]=dizi1[bas];
    int orta=(bas+son)/2;
    seg1[2*x]=build(2*x,bas,orta);
    seg1[2*x+1]=build(2*x+1,orta+1,son);
        return seg1[x]=max(seg1[2*x],seg1[2*x+1]);
}
int main()
{
    scanf("%d",&n);
    cin>>s;
    s="U"+s;
    if(s[1]=='C')
        dizi1[1]=-1;
    else dizi1[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(s[i]=='C')
            dizi1[i]=dizi1[i-1]-1;
        else dizi1[i]=dizi1[i-1]+1;
    }
    if(s[n]=='C')
        dizi2[n]=-1;
    else dizi2[n]=1;
    for(int i=n-1;i>=0;i--)
    {
        if(s[i]=='C')
            dizi2[i]=dizi2[i+1]-1;
        else dizi2[i]=dizi2[i+1]+1;
    }
    build(1,1,n);
    build2(1,1,n);
    int q;
    scanf("%d",&q);
    while(q--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",max(segment(1,1,n,a,b)-dizi1[a-1],segment2(1,1,n,a,b)-dizi2[b+1]));
    }
    return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
election.cpp: In function 'int main()':
election.cpp:50:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
election.cpp:74:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |     scanf("%d",&q);
      |     ~~~~~^~~~~~~~~
election.cpp:78:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   78 |         scanf("%d%d",&a,&b);
      |         ~~~~~^~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |