解题方法:差分数组。需要注意对未涂色的判断(0表示未涂色)

#include <iostream>
using namespace std;
const int MAXN = 1e6+10;
int n;
int a[MAXN];
int main() {
    scanf("%d",&n);
    int q;
    scanf("%d",&q);
    while(q--){
        int l,r;
        scanf("%d%d",&l,&r);
        a[l]++;  //差分数组,a的前缀和表示多次区间修改后的值
        a[r+1]--;
    }
    for(int i=1;i<=n;++i){
        a[i] += a[i-1];
        if(a[i]==0)cout<<"O";
        else if(a[i]%3==0)cout<<"B";
        else if(a[i]%3==1)cout<<"R";
        else cout<<"G";
    }
    cout<<endl;
}
// 64 位输出请用 printf("%lld")