http://www.lydsy.com/JudgeOnline/problem.php?id=1493
Brief description:
略。)
Analysis:
测试模板。)
//}/* .................................................................................................................................. */
const int MAXN=500001;
const int N = int(5e5) + 9, NN = 4*N;
int n;
namespace T{
int lc[NN], rc[NN], sc[NN]; bool s0[NN];
int a, b, c;
#define lx (x<<1)
#define rx (lx|1)
#define ml (l+r>>1)
#define mr (ml+1)
#define lcc lx,l,ml
#define rcc rx,mr,r
#define rt 1, 0, n-1
void sss(int x, int c){
lc[x] = rc[x] = c;
sc[x] = s0[x] = 1;
}
void upd(int x){
lc[x] = lc[lx]; rc[x] = rc[rx];
sc[x] = sc[lx] + sc[rx] - (rc[lx] == lc[rx]);
}
void rls(int x){
if (s0[x]){
sss(lx, lc[x]), sss(rx, rc[x]);
s0[x] = 0;
}
}
int getColor(int x, int l, int r){
if (l == r) return lc[x];
rls(x); return a < mr ? getColor(lcc) : getColor(rcc);
}
int getColor(int x){
a = x;
return getColor(rt);
}
int getCount(int x, int l, int r){
if (b < l || r < a) return 0;
if (a <= l && r <= b) return sc[x];
rls(x); int z = getCount(lcc) + getCount(rcc);
if (a <= ml && mr <= b && rc[lx] == lc[rx]) --z;
return z;
}
int getCount(int _a, int _b){
if (_a <= _b){
a = _a, b = _b;
return getCount(rt);
}
else{
return getCount(_a,n-1) + getCount(0,_b) - (lc[1] == rc[1]);
}
}
void Build(int x, int l, int r){
if (l == r) sss(x, RD());
else{
s0[x] = 0; //!
Build(lcc), Build(rcc);
upd(x);
}
}
void _Paint(int x, int l, int r){
if (b < l || r < a) return;
if (a <= l && r <= b) sss(x, c);
else{
rls(x);
_Paint(lcc), _Paint(rcc);
upd(x);
}
}
void Paint(int _a, int _b, int _c){
c = _c;
if (_a <= _b){
a = _a, b = _b, _Paint(rt);
}
else{
a = _a, b = n-1, _Paint(rt);
a = 0, b = _b, _Paint(rt);
}
}
int offset; bool flip;
void _R(int &x){if (x<0) x+=n; else if (x>=n) x-=n;}
void _T(int &x){if (flip) x=n-x; x-=offset; _R(x);}
} using namespace T;
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
RD(n); RD(); Build(rt);
char cmd[3]; int ca, cb, z, a, b; Rush{
switch (RS(cmd)[0]){
case 'R':
if (!flip) offset += RD(); else offset -= RD();
_R(offset);
break;
case 'F':
flip = !flip;
break;
case 'S':
#define get_ab() RD(a,b);--a,--b;_T(a),_T(b); if (flip)swap(a,b)
get_ab(); ca = getColor(a), cb = getColor(b);
Paint(a,a,cb), Paint(b,b,ca);
break;
case 'P':
get_ab(); RD(c);
if (a<=b) Paint(a,b,c);
else Paint(a,n-1,c), Paint(0,b,c);
break;
case 'C':
if (cmd[1]=='S'){
get_ab();
z = getCount(a,b);
}
else{
z = sc[1]; if (z>1 && lc[1] == rc[1]) --z;
}
OT(z);
break;
}
}
return 0;
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
