2 条题解

  • 0
    @ 2026-9-4 15:21:32

    他只说了这题是简单题,没禁止我小题大作。

    仅提供一个线段树做法。

    #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
      @ 2025-10-8 16:58:29
      #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

      *【树状数组】一维区间修改+单点查询[CQOI2006]简单题

      信息

      ID
      1804
      时间
      1000ms
      内存
      512MiB
      难度
      8
      标签
      递交数
      12
      已通过
      9
      上传者