首页 技术 正文
技术 2022年11月17日
0 收藏 580 点赞 3,240 浏览 1865 个字

题目传送门

裸的带修莫队。

在Sort时如果左右区间都在同一块中,就按询问的修改的先后Sort。

对于每次查询判断向前或向后修改。

当size为N*2/3时据说是最优。O(N^(3/5))。

code:

/**************************************************************
    Problem: 2120
    User: yekehe
    Language: C++
    Result: Accepted
    Time:884 ms
    Memory:5652 kb
****************************************************************/
 
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
inline char tc(void){
    static char fl[],*A=fl,*B=fl;
    return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
int read()
{
    char c;while(c=tc(),c<''||c>'');
    int x=c-'';while(c=tc(),c>=''&&c<='')x=(x<<)+(x<<)+c-'';
    return x;
}
 
int N,M,size,a[],D[],Be[],ans,sum[],A[],l,r,t;
struct Query{int l,r,tim,id;}Q[];int Qs;
struct Change{int x,bef,to;}C[];int Cs;
 
int cmp(Query x,Query y){
    return Be[x.l]==Be[y.l]?
        (Be[x.r]==Be[y.r]?x.tim<y.tim:x.r<y.r)
            :x.l<y.l;
}//CMP函数
void re(int x,int d){
    sum[x]+=d;
    if(!sum[x]&&d<)ans--;
    if(sum[x]==&&d>)ans++;
}
int ct(int x,int y){
    if(l<=x&&x<=r)re(a[x],-),re(y,);
    a[x]=y;
}
int main()
{
    N=read(),M=read();
        for(int i=;i<=N;i++)a[i]=read(),D[i]=a[i];
    int x,y;char c;
        for(int i=;i<=M;i++){
            while(c=tc(),c!='Q'&&c!='R');
            x=read(),y=read();
            if(c=='Q')Q[++Qs]=(Query){x,y,Cs,Qs};
            else C[++Cs]=(Change){x,D[x],y},D[x]=y;
        }
    size=pow(N,0.66666);
        for(int i=;i<=N;i++)
            Be[i]=(i-)/size+;
    sort(Q+,Q+Qs+,cmp);
    l=,r=,t=;
        for(int i=;i<=Qs;i++){
            while(t<Q[i].tim)t++,ct(C[t].x,C[t].to);//向后修改
            while(t>Q[i].tim)ct(C[t].x,C[t].bef),t--;//向前修改
            while(l<Q[i].l)re(a[l],-),l++;
            while(l>Q[i].l)re(a[--l],);
            while(r<Q[i].r)re(a[++r],);
            while(r>Q[i].r)re(a[r],-),r--;
            A[Q[i].id]=ans;
        }
        for(int i=;i<=Qs;i++)
            printf("%d\n",A[i]);
    return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898