2 条题解
-
0
他只说了这题是简单题,没禁止我小题大作。
仅提供一个线段树做法。
#include<bits/stdc++.h> #define lc(p) (p<<1) #define rc(p) (p<<1|1) using namespace std; const int N=1e5+10; struct node{int l,r;bool s,tag;}tr[N<<2]; void pd(int p) { if(tr[p].tag) { tr[lc(p)].tag^=1; tr[lc(p)].s^=1; tr[rc(p)].tag^=1; tr[rc(p)].s^=1; tr[p].tag=0; } } void build(int p,int l,int r) { tr[p].l=l;tr[p].r=r; if(l==r)return ; int mid=l+r>>1; build(lc(p),l,mid);build(rc(p),mid+1,r); } void change(int p,int l,int r) { if(tr[p].r<l||r<tr[p].l)return ; if(l<=tr[p].l&&tr[p].r<=r) { tr[p].tag^=1; tr[p].s^=1; return ; } pd(p); change(lc(p),l,r);change(rc(p),l,r); } bool query(int p,int x) { if(tr[p].r<x||x<tr[p].l)return 0; if(tr[p].l==tr[p].r)return tr[p].s; pd(p); return query(lc(p),x)|query(rc(p),x); } int main() { int q,n;scanf("%d%d",&n,&q); build(1,1,n); while(q--) { int op,x,y;scanf("%d%d",&op,&x); if(op==1) { scanf("%d",&y); change(1,x,y); } else { printf("%d\n",query(1,x)); } } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=110000; int n,c[N]; int lowbit(int x) {return x&-x;} void add(int x,int k) { while(x<=n)c[x]=c[x]+k,x+=lowbit(x); } int getsum(int x) { int s=0; while(x>=1)s=s+c[x],x-=lowbit(x); return s; } int main() { int m;scanf("%d%d",&n,&m); memset(c,0,sizeof(c)); for(int i=1,k,x,y;i<=m;i++) { scanf("%d",&k); if(k==1)scanf("%d%d",&x,&y),add(x,1),add(y+1,1); else scanf("%d",&x),printf("%d\n",getsum(x)%2); } return 0; }
- 1
信息
- ID
- 1804
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 12
- 已通过
- 9
- 上传者