1.快读模板
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline int read() {
int x, sign = 1;
char ch;
while (true) {
ch = getchar();
if (ch == '-')
sign = -1;
if (ch >= '0' && ch <= '9')
break;
}
x = ch - '0';
while (true) {
ch = getchar();
if (ch < '0' || ch > '9')
break;
x = x * 10 + ch - '0';
}
return x * sign;
}
int main() {
for (int k = 1; k <= 10; k++) {
int x = read();
cout << x << endl;
}
return 0;
}
快读模板2
使用模板类实现的,可以兼容int/long long
template <typename T>
void read(T &x) {
x = 0;
int f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-') f = -1;
ch = getchar();
}
while (isdigit(ch)) {
x = x * 10 + (ch ^ 48);
ch = getchar();
}
x *= f;
return;
}
快读模板3
这是fread版本,更快,但不建议初学者使用
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int rd() {
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
return x*f;
}
待修莫队
#include<bits/stdc++.h>
using namespace std;
const int N=133336,V=1e6+5;
int n,m,mq,mc,sn,T,cnt,l,r,a[N],id[N];
struct Ask{
int l,r,id,ans,t;
}q[N];
struct Opt{
int pos,val;
}p[N];
inline bool cmplr(Ask A,Ask B){
if(id[A.l]!=id[B.l]) return A.l<B.l;
if(id[A.r]!=id[B.r]) return A.r<B.r;
return A.t<B.t;
}
inline bool cmpid(Ask A,Ask B){
return A.id<B.id;
}
inline void modify(int x){
if(l<=p[x].pos&&p[x].pos<=r){
del(a[p[x].pos]);
swap(a[p[x].pos],p[x].val);
add(a[p[x].pos]);
}
else swap(a[p[x].pos],p[x].val);
}
void solve(){
l=1,r=0;
for(int i=1;i<=mq;i++){
while(r<q[i].r) add(a[++r]);
while(l>q[i].l) add(a[--l]);
while(r>q[i].r) del(a[r--]);
while(l<q[i].l) del(a[l++]);
while(T<q[i].t) modify(++T);
while(T>q[i].t) modify(T--);
q[i].ans=cnt;
}
}
int main(){
char opt;
read(n),read(m);
for(int i=1;i<=n;i++) read(a[i]);
sn=pow(n,2.0/3);
for(int i=1;i<=m;i++){
cin>>opt;
if(opt=='Q'){
mq++;
read(q[mq].l),read(q[mq].r);
q[mq].id=i;
q[mq].t=mc;
}
else{
mc++;
read(p[mc].pos),read(p[mc].val);
}
}
for(int i=1;i<=n;i++) id[i]=(i-1)/sn+1;
sort(q+1,q+mq+1,cmplr);
solve();
sort(q+1,q+mq+1,cmpid);
for(int i=1;i<=mq;i++) cout<<q[i].ans<<"\n";
return 0;
}