题解:CF2248D Good Pair Queries
fish_love_cat · · 题解
为什么总是被简单题卡一万年然后彻底倒闭?
因为一个
每步操作你需要保证选出来的
考虑到
容易发现我们可以把
显然这个时候添加一个
区间查询的话,我们维护四类点数量的前缀和,复杂度线性。
int qzh[4][200005];
inline void solve(){
int n,q;
cin>>n>>q;
string s,t;
cin>>s>>t;
s=" "+s;
t=" "+t;
for(int i=1;i<=n;i++){
for(int op=0;op<4;op++)
qzh[op][i]=qzh[op][i-1];
int sum=(s[i]-'0')*2+(t[i]-'0');
qzh[sum][i]++;
}
while(q--){
int l,r;
cin>>l>>r;
l--;
int a0=qzh[0][r]-qzh[0][l];
int a1=qzh[1][r]-qzh[1][l];
int a2=qzh[2][r]-qzh[2][l];
int a3=qzh[3][r]-qzh[3][l];
int qaq=max(a1,a2)-min(a1,a2);
if(qaq<=a0+a3)cout<<"Yes\n";
else cout<<"No\n";
}
}
// 话说究竟为什么会写这种东西……
//「嘿。」
// 我把那页撕了。不理会「啊啊──!」地发出悲痛叫声的艾姆妮西亚,我把纸揉成一团丢进垃圾桶。
//「艾姆妮西亚,我跟你说昨天事情经过的真相,请你仔细听好了。」