zoukankan      html  css  js  c++  java
  • bzoj2120

    题解:

    可修改莫队

    我们加入一个时间T

    然后在排序的时候考虑一下时间

    在计算的时候也要考虑

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100005;
    struct Query
    {
        int l,r,Tim,id;
    }q[N];
    struct Change
    {
        int pos,New,Old;
    }c[N];
    char sign[3];
    int n,m,s[N],color[N*100],t,x,y,Time,now[N],unit,Be[N],ans[N],Ans,l=1,r,T;
    int cmp(Query a,Query b)
    {
        if (Be[a.l]!=Be[b.l])return a.l<b.l;
        if (Be[a.r]!=Be[b.r])return a.r<b.r;
        return a.Tim<b.Tim;
    }
    void revise(int x,int d)
    {
        color[x]+=d;
        if (d>0)Ans+=color[x]==1;
        if (d<0)Ans-=color[x]==0;
    }
    void doit(int x,int d)
    {
        if (l<=x&&x<=r)
         {
             revise(d,1);
             revise(s[x],-1);
         }
        s[x]=d; 
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        int unit=pow(n,0.666666);
        for (int i=1;i<=n;i++)
         {
             scanf("%d",&s[i]);
             now[i]=s[i];
             Be[i]=i/unit+1;
         }
        for (int i=1;i<=m;i++)
         {
             scanf("%s%d%d",&sign,&x,&y);
             if (sign[0]=='Q')q[++t]=(Query){x,y,Time,t};
             if (sign[0]=='R')c[++Time]=(Change){x,y,now[x]},now[x]=y;
         } 
        sort(q+1,q+t+1,cmp);
        for (int i=1;i<=t;i++)
         {
             while (T<q[i].Tim)doit(c[T+1].pos,c[T+1].New),T++;
             while (T>q[i].Tim)doit(c[T].pos,c[T].Old),T--;
            while (l<q[i].l)revise(s[l],-1),l++;
            while (l>q[i].l)revise(s[l-1],1),l--;
            while (r<q[i].r)revise(s[r+1],1),r++;
            while (r>q[i].r)revise(s[r],-1),r--;
            ans[q[i].id]=Ans;
         } 
        for (int i=1;i<=t;i++)printf("%d
    ",ans[i]); 
    }
  • 相关阅读:
    php文件 基本语法
    DBDA类 连接数据库 返回Json 返回字符串
    全选复选框做法
    弹窗js
    AJAX
    弹窗JS CSS
    JavaScript
    链接数据库 类
    PHP 分页 查询
    Foreach嵌套Foreach
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8439431.html
Copyright © 2011-2022 走看看