求助ABC F.
  • 板块学术版
  • 楼主djfuck
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/12/17 22:01
  • 上次更新2023/10/24 07:22:49
查看原帖
求助ABC F.
594848
djfuck楼主2022/12/17 22:01
#include <bits/stdc++.h>
#ifdef LOCAL
// #include <testlib.h>
#include <oi_debug/debug.hpp>
#endif
using namespace std;
const long long mod=1000000007LL; //const long long mod=998244353LL;
namespace Standard{
    namespace Basic{
        #define int long long
        #define float long double
        #define r0(i,n)for(long long i=0;i<n;++i)
        #define r1(i,n)for(long long i=1;i<=n;++i)
        #define rep(i,a,n)for(long long i=a;i<n;++i)
        #define all(n)n.begin(),n.end()
        #define pb push_back
        #define dwt debug_with_type
        #define dbg debug
        #define over(n){cout<<n<<endl;return 0;}
        #define Over(n){cout<<n<<endl;exit(0);}
        #define inf 0x3f3f3f3f
        #define inf2 0x7f3f3f3f
        #define infl 0x3f3f3f3f3f3f3f3fLL
        #ifndef LOCAL
        #define endl '\n'
        #endif
        template<typename T,typename U>bool chmin(T&a,const U b){if(a>b){a=b;return 1;}return 0;}
        template<typename T,typename U>bool chmax(T&a,const U b){if(a<b){a=b;return 1;}return 0;}
        template<typename T>T               lowbit(T x){return x&(-x);}
        inline string                       YN(bool x,string Y="Yes",string N="No"){return(x)?(Y):(N);}
        void                                flush(){cout.flush();}
        using uint=unsigned long long;using i32=int32_t;using pii=pair<long long,long long>;using p32=pair<int32_t,int32_t>;
        long double eps=1e-10;
    }namespace FastIO{
		template<typename T>inline T    Read(){T x=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+(c-'0');c=getchar();}return x*w;}
		template<typename T>inline void Print(T x){if(x<0){x=-x;putchar('-');}if(x>9)Print(x/10);putchar(x%10+'0');}
		inline int                      read(){return Read<int>();}
		inline int                      print(int x){Print<int>(x);return 0;}
        inline int                      print(int x,char c){Print<int>(x),putchar(c);return 0;}
	}namespace Algorithm{
        template<typename T>vector<int>discrete(vector<T>vec,int ind=0){vector<T>b=vec;vector<int>ans;sort(vec.begin(),vec.end());vec.erase(unique(vec.begin(),vec.end()),vec.end());for(int i=0;i<b.size();++i)ans.push_back(lower_bound(vec.begin(),vec.end(),b[i])-vec.begin()+ind);return ans;}
        pair<int,int>binary_search(bool(*checker)(int),int left=-1,int right=inf+1){while(left+1!=right){int mid=(left+right)>>1;if(checker(mid))left=mid;else right=mid;}return make_pair(left,right);}
        pair<long double,long double>binary_search(bool(*checker)(long double),long double left=-Basic::eps,long double right=inf+Basic::eps){while(left+Basic::eps!=right){long double mid=(left+right)/2.0;if(checker(mid))left=mid;else right=mid;}return make_pair(left,right);}
        long double ternary_search(long double left,long double right,long double(*func)(long double),bool smallest=1,long double eps=Basic::eps){while(right-left>eps){long double mid=(left+right)/2,mid1=mid-eps,mid2=mid+eps;if(smallest){if(func(mid1)>func(mid2))left=mid;else right=mid;}else{if(func(mid1)<func(mid2))left=mid;else right=mid;}}return left;}
        vector<int>prefix_function(string s){int n=s.size();vector<int>v(n);for(int i=1,l;i<n;++i){l=v[i-1];while(l&&s[i]!=s[l])l=v[l-1];v[i]=l+(s[i]==s[l]);}return v;}
        vector<int>KMP(string s,string patt){int n=s.size(),m=patt.size();vector<int>v=prefix_function(patt),occurance;for(int i=0,j=0;i<n;++i){while(j&&patt[j]!=s[i])j=v[j-1];if(patt[j]==s[i])j++;if(j==m)occurance.push_back(i-j+1);}return occurance;}
    }namespace Data_Structure{
        struct                     DSU{int N;vector<int>fa,sz;DSU(int n=100005):N(n){fa.resize(n+1),sz.resize(n+1,1);for(int i=1;i<=n;++i)fa[i]=i;}int root(int x){return((fa[x]==x)?(x):(fa[x]=root(fa[x])));}void merge(int a,int b){int A=root(a),B=root(b);if(sz[A]>sz[B])swap(A,B);fa[A]=B,sz[B]+=sz[A];}bool same(int a,int b){return root(a)==root(b);}int size(int x){return sz[root(x)];}};
        template<typename T>struct Stack{private:vector<T>stk;int sz=0;public:Stack(int n){stk.resize(n);}void push(T x){stk[++sz]=x;}T top(){return stk[sz];}void pop(){sz=max(sz-1ll,0ll);}int size(){return sz;}bool empty(){return(sz==0);}void clear(){sz=0;}};template<typename T>struct Queue{private:vector<T>que;int l,r,N;public:Queue(int n){N=n;que.resize(N);l=N/2,r=l-1;}void push_back(T x){que[++r]=x;}void pop_back(){r=max(r-1,l-1);}T front(){return que[l];}T back(){return que[r];}void push_front(T x){que[--l]=x;}void pop_front(){l=min(l+1,r+1);}int size(){return r-l+1;}bool empty(){return(r<l);}void clear(){l=N/2,r=l-1;}};
        template<typename T>struct List{};
    }namespace Number_Theory{
		int  pw(int a,int b,int p=mod){int res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}return res;}
		int  gcd(int x,int y){return!y?x:gcd(y,x%y);}
		void exgcd(int a,int b,int&x,int&y){if(!b){x=1,y=0;return;}exgcd(b,a%b,y,x);y-=(a/b*x);}
		int  inv(int x,int p=mod){exgcd(x,p,x,*new int);return(x%p+p)%p;}
		int  bsgs(int a,int b,int p){map<int,int>val;int A=1,t=sqrt(p)+1;for(int i=0;i<t;i++){val[A*b%p]=i;A=A*a%p;}for(int i=1,_a=A;i<=t;i++){if(val[_a]&&val[_a]!=-1){int ans=i*t-val[_a];for(int i=0,A=1;i<t;i++){val[A*b%p]=-1;A=A*a%p;}return ans;}_a=_a*A%p;}return-1;}
	}using namespace Basic;using namespace FastIO;using namespace Algorithm;using namespace Data_Structure;using namespace Number_Theory;
}using namespace Standard;
const bool Multi_Cases=0;signed Main();signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0),cout.setf(ios::fixed),cout.precision(20);unsigned long long T=1LL;if(Multi_Cases)cin>>T;while(T--)Main();return 0;}

pair<int,int> t[200005];
void prnt(int x,int y)
{
    cout<<x<<" "<<y<<endl;
    // cout<<"#"<<t[x].first<<" "<<t[x].second<<endl;
    // cout<<"#"<<t[y].first<<" "<<t[y].second<<endl;
}
map<pii,int> mm;
int M;
void build(int l,int r)
{
    // if(l==0||r==0) return;
    if(l==r) {t[++M]={l,r};return;}
    int m=(l+r)>>1;
    for(int i=l;i<=m;++i) t[++M]={i,m};
    for(int i=m+1;i<=r;++i) t[++M]={m+1,i};
    if(r-l>1)build(l,m),build(m+1,r);
}
int L,R;
void query(int l,int r)
{
    // dbg(l); debug(r);
    if(L==l&&r==R&&mm.find({l,r})!=mm.end()) {prnt(mm[{l,r}],mm[{l,r}]); return ;}
    int m=(l+r)>>1;
    if(R<=m) query(l,m);
    else if(L>m) query(m+1,r);
    else
    {
        // cout<<L<<','<<m<<endl;
        // cout<<m+1<<","<<R<<endl;
        prnt(mm[{L,m}],mm[{m+1,R}]);
    }
}
signed Main()
{
    int n;n=read();
    build(1,n);
    cout<<M<<endl;
    r1(i,M) prnt(t[i].first,t[i].second),mm[t[i]]=i;
    int Q=read();
    while(Q--)
    {
        L=read(),R=read();
        // l=r=0;
        query(1,n);
    }
    return 0;
}

输了十几组数据都是对的。

但是交上去 TLE\tt TLE

求巨佬帮助喵。

2022/12/17 22:01
加载中...