为啥加个引用就不会超时
查看原帖
为啥加个引用就不会超时
1122530
elpsconr楼主2024/11/29 22:13

有个疑问check函数里面加了个引用就不会TLE,但是加了就不会,这是为啥?我不能理解

/*
   卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define ctz(x) __builtin_ctzll(x)
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e5+5,yyx=1e9+7;
vector<int> to[N];
int n,q;
int dx[N],dy[N];
inline int mod(int x){
  return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
  return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
  return x<y?x=y,1:0;
}
map<PII,vector<int>> g;
int check(int l,int r,int x,int y){
    vector<int> &p=g[{x,y}];
    //vector<int> p=g[{x,y}];//不加会超时
    auto c=lower_bound(all(p),l);
    if(c==p.end()) return 0;
    return *c<=r;
}
inline void solve(){
  cin>>n>>q;
  string s;cin>>s;
  s=' '+s;
  g[{0,0}].push_back(0);
  rep(i,1,n){
    dx[i]=dx[i-1],dy[i]=dy[i-1];
    if(s[i]=='R') dx[i]++;
    if(s[i]=='U') dy[i]++;
    if(s[i]=='D') dy[i]--;
    if(s[i]=='L') dx[i]--;
    g[{dx[i],dy[i]}].push_back(i);
  }
  rep(i,1,q){
    int x,y,l,r;cin>>x>>y>>l>>r;
    int px=dx[l-1]+dx[r]-x,py=dy[l-1]+dy[r]-y;
    if(check(0,l-1,x,y)||check(l,r,px,py)||check(r,n,x,y)) cy;
    else cn;
  }
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/11/29 22:13
加载中...