求助输出问题
查看原帖
求助输出问题
128591
Refined_heart楼主2021/11/18 07:41

蒟蒻在代码里用了 fwrite 但是交上去显示 too short on line ... 不知道为什么 求助/kel

不是主席树的问题 就是输出的问题 /kel

#include <bits/stdc++.h>
using namespace std;
typedef double db;
//#define int long long
#define fi first
#define se second
#define mk make_pair
#define pb emplace_back
#define poly vector<int>
#define Bt(a) bitset<a>
#define bc __builtin_popcount
#define pc putchar
#define ci const int&
const int mod = 1e9 + 7;
const db eps = 1e-10;
inline int Max(ci x, ci y) {return x > y ? x : y;}
inline int Min(ci x, ci y) {return x < y ? x : y;}
inline db Max(db x, db y) {return x - y > eps ? x : y;}
inline db Min(db x, db y) {return x - y < eps ? x : y;}
inline int Add(ci x, ci y, ci M = mod) {return (x + y) % M;}
inline int Mul(ci x, ci y, ci M = mod) {return 1ll * x * y % M;}
inline int Dec(ci x, ci y, ci M = mod) {return (x - y + M) % M;}
typedef pair<int, int> pii;
inline int Abs(int x) {return x < 0 ? -x : x;}
char buf[1<<21],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char Obuf[1<<23],*O=Obuf;//Siz shoule be the size of Out File
int pst[50],ptop;
inline void Fprint(){fwrite(Obuf,1,O-Obuf,stdout);}
inline void Fwrite(int x){
  if(x<0)*O++='-',x=-x;ptop=0;
  while(x)pst[++ptop]=x%10,x/=10;
  while(ptop)*O++=pst[ptop--]+'0';
//   if(O-Obuf>100000)Fprint(),O=Obuf;
}
inline int read() {
    int s = 0, w = 1;
    char ch = getchar();
    while (!isdigit(ch)) {if (ch == '-') w = -1;ch = getchar();}
    while (isdigit(ch)) {s = s * 10 + ch - '0';ch = getchar();}
    return s * w;
}
inline void write(int x) {
    if (x < 0)putchar('-'), x = -x;
    if (x > 9)write(x / 10);
	pc(x % 10 + '0');
}
inline int qpow(int x, int y) {
    int res = 1;
    while (y) {if (y & 1)res = Mul(res, x);x = Mul(x, x);y >>= 1;}
    return res;
}
inline void cadd(int &x, int y) {x += y;}
inline void cmul(int &x, int y) {x *= y;}
inline void cmax(int &x, int y) {x = Max(x, y);}
inline void cmin(int &x, int y) {x = Min(x, y);}
const int N = 2e5 + 10;
namespace Refined_heart{
	namespace ZXT{
		const int SN=80000010;
		int ls[SN],rs[SN],sum[SN];
		int node;
		void build(int &x,ci l,ci r){
			x=++node;
			if(l==r)return;
			int mid=(l+r)>>1;
			build(ls[x],l,mid);
			build(rs[x],mid+1,r);
		}
		int ins(ci pre,ci l,ci r,ci pos){
			int p=++node;
			ls[p]=ls[pre];
			rs[p]=rs[pre];
			sum[p]=sum[pre]+1;
			if(l==r)return p;
			int mid=(l+r)>>1;
			if(pos<=mid)ls[p]=ins(ls[pre],l,mid,pos);
			else rs[p]=ins(rs[pre],mid+1,r,pos);;
			return p;
		}
		int query(ci L,ci R,ci l,ci r,ci k){
			if(l==r)return l;
			int sm=sum[ls[R]]-sum[ls[L]];
			int mid=(l+r)>>1;
			if(k<=sm)return query(ls[L],ls[R],l,mid,k);
			return query(rs[L],rs[R],mid+1,r,k-sm);
		}
	}
	using namespace ZXT;
	int n,m,a[N],b[N],blen,rt[N];
	inline int getpos(ci x){return lower_bound(b+1,b+blen+1,x)-b;}
	void solve(){
		n=read(),m=read();
		for(int i=1;i<=n;++i){
			a[i]=read();
			b[i]=a[i];
		}
		sort(b+1,b+n+1);
		blen=unique(b+1,b+n+1)-b-1;
		build(rt[0],1,blen);
		for(int i=1;i<=n;++i){
			int x=getpos(a[i]);
			rt[i]=ins(rt[i-1],1,blen,x);
		}
		while(m--){
			int x=read(),y=read(),z=read();
			int w=query(rt[x-1],rt[y],1,blen,z);
			Fwrite(b[w]);*O++='\n';if(O-Obuf>10000){
			    Fprint();
			    O=Obuf;
			}
		}
		if(O!=Obuf)Fprint();
	}
}
int main(){
	Refined_heart::solve();
	return 0;
}

2021/11/18 07:41
加载中...