题解: view
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
const int maxn=200005;
vector<int> pos1[30],pos2[30];
char s1[maxn],s2[maxn];
map<pair<char,char>, int> mp;
int main()
{
//freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
scanf("%s%s",s1,s2);
int hu=0;
int p1=-1,p2=-1;
pair<char,char> m1,m2;
map<pair<char,char>, int>::iterator it;
for(int i=0;i<n;i++){
if(s1[i]!=s2[i]){
pos1[s1[i]-'a'].push_back(i);
pos2[s2[i]-'a'].push_back(i);
hu++;
m1=make_pair(s1[i],s2[i]);
m2=make_pair(s2[i],s1[i]);
it=mp.find(m2);
if(it!=mp.end()) {
p1=mp[m2];
p2=i;
}
mp[m1]=i;
}
}
int ps=-1;
for(int i=0;i<26;i++){
if(pos1[i].size()!=0&&pos2[i].size()!=0){
ps=i;
}
}
if(ps==-1) printf("%d\n%d %d\n",hu,p1,p2);
else if(p1==-1&&p2==-1) printf("%d\n%d %d\n",hu-1,pos1[ps][0]+1,pos2[ps][0]+1);
else printf("%d\n%d %d\n",hu-2,p1+1,p2+1);
return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<set>
using namespace std;
const int maxn=200005;
set<int> V,H;
multiset <int> qh, qv;
void init()
{
V.clear(),H.clear();
}
int main()
{
//freopen("in.txt","r",stdin);
int w,h,n;
scanf("%d%d%d",&w,&h,&n);
V.insert(0),V.insert(w),H.insert(0),H.insert(h);
qh.insert(h),qv.insert(w);
set<int>::iterator it;
multiset <int>::iterator it1;
//puts("hello");
while(n--){
char tp[2];
int v;
scanf("%s %d",tp,&v);
if(tp[0]=='V'){
it=V.lower_bound(v);
int v1,v2 = *it;
it--,v1=*it;
V.insert(v);
it1= qv.find(v2-v1);
qv.erase(it1);
qv.insert(v - v1);
qv.insert(v2 - v);
}
else{
it=H.lower_bound(v);
int v1,v2 = *it;
it--,v1=*it;
H.insert(v);
it1 = qh.find(v2-v1);
qh.erase(it1);
qh.insert(v - v1);
qh.insert(v2 - v);
}
printf("%I64d\n",1LL*(*(qv.rbegin())) * (*(qh.rbegin())));
}
return 0;
}