萌新初学 oi 1 ms wa 70pts 求调教
查看原帖
萌新初学 oi 1 ms wa 70pts 求调教
1088663
zzzyyyyhhhhh楼主2024/9/2 15:07
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+100,M=1e7+100;
int m,n;
struct op
{
	int p,val;
};
vector<op> o[N];
// int b[N];
namespace hjt
{
	#define mid ((l+r)>>1)
	int v[N];
	struct node
	{
		int l1,r1,sum,cnt;
	}tr[N*570];
	int cnt=1;
	void pushup(int x)
	{
		tr[x].sum=tr[tr[x].l1].sum+tr[tr[x].r1].sum;
		tr[x].cnt=tr[tr[x].l1].cnt+tr[tr[x].r1].cnt;
	}
	void add(int pos,int now,int ls,int l,int r,int val)
	{
		// cout<<pos<<' '<<now<<' '<<ls<<' '<<l<<' '<<r<<' '<<val<<'\n';
		if(l==r)
		{
			tr[now].cnt=tr[ls].cnt;
			tr[now].sum=tr[ls].sum;
			tr[now].cnt+=val;
			tr[now].sum+=pos*val;
			// cout<<"A"<<now<<' '<<tr[now].sum<<' '<<pos<<' '<<b[pos]<<' '<<val<<'\n';
			return;
		}
		if(pos<=mid)
		{
			tr[now].l1=++cnt;
			tr[now].r1=tr[ls].r1;
			add(pos,tr[now].l1,tr[ls].l1,l,mid,val);
		}
		else
		{
			tr[now].r1=++cnt;
			tr[now].l1=tr[ls].l1;
			add(pos,tr[now].r1,tr[ls].r1,mid+1,r,val);
		}
		pushup(now);
	}
	void add(int x)
	{
		v[x]=v[x-1];
		int tmp=v[x-1];
		for(auto i:o[x])
		{
			v[x]=++cnt;
			add(i.p,v[x],tmp,1,M,i.val);
			tmp=v[x];
		}
	}
	int find(int k,int l,int r,int x)
	{
		if(tr[x].cnt==0)return 0;
		// cout<<x<<' '<<l<<' '<<r<<' '<<k<<'\n';
		if(l==r)
		{
			return l*k;
		}
		if(tr[x].cnt<=k)
		{
			return tr[x].sum;
		}
		int res=0;
		res=find(min(k,tr[tr[x].l1].cnt),l,mid,tr[x].l1);
		if(k>tr[tr[x].l1].cnt)
		{
			res+=find(k-tr[tr[x].l1].cnt,mid+1,r,tr[x].r1);
		}
		return res;
	}
	int find(int x,int k)
	{
		return find(k,1,M,v[x]);
	}
	#undef mid
}using namespace hjt;
signed main()
{
	// freopen("P3168_2.in","r",stdin);
	cin>>n>>m;
	int x,y,z,aa,bb,cc,kk;
	for(int i=1;i<=n;i++)
	{
		cin>>x>>y>>z;
		// b[i]=z;
		o[x].push_back({z,1});
		o[y+1].push_back({z,-1});
	}
	// sort(b+1,b+1+n);
	// int cntt=unique(b+1,b+1+n)-b-1;
	// for(int i=1;i<=1e5;i++)
	// {
	// 	for(int j=0;j<o[i].size();j++)
	// 	{
	// 		o[i][j].p=lower_bound(b+1,b+1+cntt,o[i][j].p)-b;
	// 		// cout<<i<<' '<<j.p<<' '<<b[j.p]<<'\n';
	// 	}
	// }
	for(int i=1;i<=1e5;i++)
	{
		add(i);
	}
	int pre=1;
	// cout<<"a"<<v[1]<<' '<<tr[v[1]].cnt<<'\n';
	for(int i=1;i<=m;i++)
	{
		cin>>x>>aa>>bb>>cc;
		kk=1+(aa*pre+bb)%cc;
		// cout<<x<<' '<<kk<<'\n';
		pre=find(x,kk);
		cout<<pre<<'\n';
	}
}

2024/9/2 15:07
加载中...