锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct point
{
int x,y;
}p[100010];
int c[100010],n,d,a[100010],map[100010],t;
bool cmp(point p0,point p1)
{
return p0.x<p1.x;
}
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int s=0;
while(x)
{
s=(s+c[x])%9901;
x-=lowbit(x);
}
return s;
}
int update(int x,int y)
{
while(x<=n)
{
c[x]=(c[x]+y)%9901;
x+=lowbit(x);
}
}
int find(int x,bool y)
{
int l=1,r=n,m,ans=-1;
if(y)
{
while(l<=r)
{
m=(l+r)>>1;
if(p[m].x>=x)
{
ans=m;
r=m-1;
}
else l=m+1;
}
}else
{
while(l<=r)
{
m=(l+r)>>1;
if(p[m].x<=x)
{
ans=m;
l=m+1;
}
else r=m-1;
}
}
return ans;
}
int main()
{
while(scanf("%d%d",&n,&d)!=EOF)
{
memset(c,0,sizeof(c[0])*(n+1));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
p[i].x=a[i];
p[i].y=i;
}
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;i++)map[p[i].y]=i;
for(int i=1;i<=n;i++)
{
int l=find(a[i]-d,1),r=find(a[i]+d,0);
if(l+1&&r+1&&l<=r)
{
t=(9901+sum(r)-sum(l-1)+1)%9901;//+1宸у涔嬪錛岀敤浜庢爣璁版槸鍚﹁鏇存柊錛岀瓟妗堝啀鍑忓幓n鍗沖彲
update(map[i],t);
}
}
printf("%d\n",(9901*20+sum(n)-n)%9901);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define lowbit(x) (x&(-x))
bool c[1010][1010];
int n;
bool sum(int x,int y)
{
bool s=0;
while(x)
{
int yy=y;
while(yy)
{
s^=c[x][yy];
yy-=lowbit(yy);
}
x-=lowbit(x);
}
return s;
}
void update(int x,int y)
{
while(x<=n)
{
int yy=y;
while(yy<=n)
{
c[x][yy]=!c[x][yy];
yy+=lowbit(yy);
}
x+=lowbit(x);
}
}
int main()
{
int t,x,y,xx,yy,m;
char s[2];
scanf("%d",&t);
while(t--)
{
memset(c,0,sizeof(c));
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%s",s);
if(s[0]=='C')
{
scanf("%d%d%d%d",&x,&y,&xx,&yy);
update(++xx,++yy);
update(x,yy);
update(xx,y);
update(x,y);
}else
{
scanf("%d%d",&x,&y);
printf("%d\n",sum(x,y));
}
}
puts("");
}
return 0;
}
#include <stdio.h>

struct xx {
int l, r, m, c;
} t[9000000];
int n, m, i;

void make(int l, int r, int i) {
t[i].l = l, t[i].r = r, t[i].m = (l + r) >> 1, t[i].c = r - l;
if (l + 1 != r) {
make(l, t[i].m, i << 1);
make(t[i].m, r, (i << 1) + 1);
}
}

int update(int l, int r, int i) {
if (t[i].l == l && t[i].r == r) return t[i].c;
if (r <= t[i].m) return update(l, r, i << 1);
if (l >= t[i].m) return update(l, r, (i << 1) + 1);
return update(l, t[i].m, i << 1) + update(t[i].m, r, (i << 1) + 1);
}

int find(int k, int i) {
t[i].c--;
if (t[i].l == t[i].m) {
printf("%d ", t[i].l);
return t[i].l;
}
int s = t[i << 1].c;
if (k <= s) return find(k, i << 1);
return find(k - s, (i << 1) + 1);
}

int main() {
while (scanf("%d%d", &n, &m) != EOF) {
make(1, n + 1, 1), i = 0;
while (i = update(1, find((i + m) % t[1].c ? (i + m) % t[1].c : t[1].c, 1) + 1, 1), t[1].c);
printf("\n");
}
return 0;
}
2 int r[30010] = {0}, p[30010], n, x, y, d[30010];
3 char s[3];
4
5 int find(int x) {
6 if (x != p[x]) {
7 int t = p[x];
8 p[x] = find(p[x]);
9 r[x] += r[t];
10 }
11 return p[x];
12 }
13
14 int main() {
15 for (int i = 1; i < 30010; i++)p[i] = i, d[i] = 1;
16 scanf("%d", &n);
17 while (n--) {
18 scanf("%s%d", s, &x);
19 if (s[0] == 'M') {
20 scanf("%d", &y);
21 x = find(x), y = find(y);
22 p[x] = y;
23 r[x] = d[y];
24 d[y] += d[x];
25 } else {
26 find(x);
27 printf("%d\n", r[x]);
28 }
29 }
30 return 0;
31 }