洛谷[P2412] 查单词
人生苦短,我用map
话说那些码线段树的都是大佬%%%%%%
本蒟蒻不会,于是就用了两个map+cincout,开O2O_2O2才过,但我没优化常数,优化常数的话肯定是能过的。
为什么用O2O_2O2?
map常数贼大.....
我们用一个map存他的初始位置,一个存更改大小写以后的字符串(然而用结构体肯定更好,然而我懒,就用map了)
#include<bits/stdc++.h> using namespace std; int a,b,c,d; string s[50002],s3[50002]; map<string,int>mmp; map<string ,string>mmq; //两个map,但实际上你也可以用结构体存改了大写以后的,都差不多 bool cmp(string s1,string s2){return s1>s2;}//反向sort必备 int main(){ ios::sync_with_stdio(false); cin>>a>>b; //就是喜欢用cin for(int i=1;i<=a;i++) cin>>s[i],mmp[s[i]]=i; //存初始位置 for(int i=1;i<=a;i++){ string s4=s[i]; for(int j=0;j<s4.size();j++){ if(s4[j]>='A'&&s4[j]<='Z') s3[i]+='a'+s4[j]-'A'; else s3[i]+=s4[j]; } mmq[s3[i]]=s4; } //更改那些大写的字母 sort(s3+1,s3+a+1,cmp); for(int i=1;i<=b;i++){ cin>>c>>d; for(int j=1;j<=a;j++) if(mmp[mmq[s3[j]]]>=c&&mmp[mmq[s3[j]]]<=d){ cout<<mmq[s3[j]]<<'\n';break;} //这才是主程序,前面都是预处理 } }
人生苦短,我用STl

浙公网安备 33010602011771号