代码很好懂,关键句需要自己琢磨,直接上代码了。
#includeusing namespace std;template inline void read(T &_a){ bool f=0;int _ch=getchar();_a=0; while(_ch<'0' || _ch>'9'){ if(_ch=='-')f=1;_ch=getchar();} while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();} if(f)_a=-_a;}const int maxn=200001;int n,k,p,col[maxn],cost[maxn],sum[maxn][50],last[50],tp;long long ans;int main(){ read(n); read(k); read(p); for(register int i=1;i<=n;++i) { read(col[i]); read(cost[i]); for (register int v=0;v p) ++tp; for (register int i=tp;i<=n;++i) { if(cost[i]<=p) tp=i; ans+=sum[last[col[i]]<=tp?i-1:tp][col[i]]; last[col[i]]=i; } printf("%lld",ans); return 0;}