#include #include #include #include #include #include #include #include #define ll long long #define inf 1000000000 using namespace std; int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int T,n,q; int a[100005],id[1000005]; vectorve[1000005]; struct data{ int l,r,ans,lc,rc; }t[400005]; void update(int k) { if(t[k].l==t[k].r)return; t[k].lc=t[k<<1].lc;t[k].rc=t[k<<1|1].rc; t[k].ans=t[k<<1].ans+t[k<<1|1].ans; if(t[k<<1].rc==t[k<<1|1].lc)t[k].ans--; } void build(int k,int l,int r) { t[k].l=l;t[k].r=r;int mid=(l+r)>>1; if(l==r) { t[k].lc=t[k].rc=a[l]; t[k].ans=1; return; } build(k<<1,l,mid); build(k<<1|1,mid+1,r); update(k); } int query(int k,int x,int y) { int l=t[k].l,r=t[k].r,mid=(l+r)>>1; if(x==l&&y==r)return t[k].ans; int ans; if(y<=mid)ans=query(k<<1,x,y); else if(x>mid)ans=query(k<<1|1,x,y); else { ans=query(k<<1,x,mid)+query(k<<1|1,mid+1,y); if(t[k<<1].rc==t[k<<1|1].lc)ans--; } return ans; } void change(int k,int x,int y) { int l=t[k].l,r=t[k].r,mid=(l+r)>>1; if(l==r) { t[k].lc=t[k].rc=y; t[k].ans=1;return; } if(x<=mid)change(k<<1,x,y); else change(k<<1|1,x,y); update(k); } void solve(int x,int y) { for(int j=0;j