为啥我咋卡常都TLE
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct QQQ
{
int op,x1,y1,x2,y2,v;
int id;
}q[600100],lq[600100],rq[600100];
vector<int>adj[500010];
int ans[500010];
ll fw[500010];
int req[500010];
int len=0,n,m,qq;
int read()
{
int x=0;char c;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x;
}
int lowbit(int x){return x&(-x);}
void add(int pos,int x)
{
for(int i=pos;i<=m;i+=lowbit(i))
fw[i]+=x;
}
ll que(int pos)
{
ll ret=0;int i;
for(i=pos;i>0;i-=lowbit(i))
ret+=fw[i];
return ret;
}
void sol(int vl,int vr,int ql,int qr)
{
int i,nl=0,nr=0;
if(vl>vr||ql>qr)return;
if(vl==vr)
{
for(i=ql;i<=qr;i++)
if(q[i].op==2)
ans[q[i].id]=vl;
return;
}
int mid=(vl+vr)/2;
for(i=ql;i<=qr;i++)
{
if(q[i].op==1)
{
if(q[i].id<=mid)
{
add(q[i].x1,+q[i].v);
add(q[i].y1+1,-q[i].v);
if(q[i].x2)
{
add(q[i].x2,+q[i].v);
add(q[i].y2+1,-q[i].v);
}
lq[++nl]=q[i];
}
else rq[++nr]=q[i];
}
else
{
int ls=q[i].id;
ll kkk=0;
for(int k=0;k<adj[ls].size();k++)
{
int x=adj[ls][k];
kkk+=que(x);
if(kkk>=req[ls])break;
}
if(req[ls]<=kkk)lq[++nl]=q[i];
else
{
req[ls]-=kkk;
rq[++nr]=q[i];
}
}
}
for(i=ql;i<=qr;i++)
{
if(q[i].op==1)
{
if(q[i].id<=mid)
{
add(q[i].x1,-q[i].v);
add(q[i].y1+1,+q[i].v);
if(q[i].x2)
{
add(q[i].x2,-q[i].v);
add(q[i].y2+1,+q[i].v);
}
}
}
}
for(i=1;i<=nl;i++)q[ql+i-1]=lq[i];
for(i=1;i<=nr;i++)q[ql+i-1+nl]=rq[i];
sol(vl,mid,ql,ql+nl-1);
sol(mid+1,vr,ql+nl,qr);
}
int main()
{
int i,x,l,r;
n=read();m=read();
for(i=1;i<=m;i++)
{
x=read();
adj[x].push_back(i);
}
for(i=1;i<=n;i++)req[i]=read();
qq=read();
for(i=1;i<=qq;i++)
{
l=read(),r=read(),x=read();
// scanf("%d%d%d",&l,&r,&x);
q[++len].op=1;q[len].id=i;
q[len].v=x;
if(l<=r)
q[len].x1=l,q[len].y1=r;
else
{
q[len].x1=l;q[len].y1=m;
q[len].x2=1;q[len].y2=r;
}
}
for(i=1;i<=n;i++)
{
q[++len].op=2;
q[len].id=i;
}
q[++len].op=1;
q[len].x1=l;q[len].y1=r;
q[len].id=qq+1;q[len].v=1e9;
sol(1,qq+1,1,len);
for(i=1;i<=n;i++)
{
if(ans[i]>qq)printf("NIE\n");
else printf("%d\n",ans[i]);
}
return 0;
}